Het verzenden van een HTTP-verzoek is essentieel voor elke app die via internet moet communiceren. Ontdek hoe u verschillende HTTP-verzoeken kunt verzenden met Go.

Een van de fundamentele principes die de werking van het World Wide Web bepalen, is de uitwisseling van verzoeken en antwoorden. Wanneer u een verzoek verzendt om toegang te krijgen tot een webpagina, reageert de server met de juiste gegevens.

Populaire protocollen die verschillende soorten internetcommunicatie regelen, zijn onder meer HTTP (Hypertext-overdrachtsprotocol), ftp (Protocol voor bestandsoverdracht), en SMTP (Simple Mail Transfer Protocol).

HTTP is het protocol dat u gewoonlijk gebruikt wanneer u een website bekijkt of een webapp gebruikt. U kunt ook werken met HTTP-verzoeken uit vele programmeertalen, waaronder Go.

Wat is een HTTP-verzoek?

HTTP definieert hoe clients, zoals webbrowsers, verzoeken naar servers sturen die vervolgens een antwoord terugsturen. Een HTTP-verzoek bevat informatie over een bron waartoe de client toegang probeert te krijgen. Het verzoekbericht bevat doorgaans een URL die de bron identificeert en andere optionele gegevens zoals kopteksten en queryparameters.

instagram viewer

Er zijn verschillende soorten HTTP-verzoeken, inclusief GET, POST, PUT, DELETE, HEAD, OPTIONS en CONNECT. De eerste vier methodetypes komen het meest voor; ze weerspiegelen de CRUD-bewerkingen die respectievelijk worden gelezen, gemaakt, bijgewerkt en verwijderd.

Het PUT-verzoektype wordt vaak door elkaar gebruikt met het PATCH-verzoektype. Ze bereiken hetzelfde doel, ze verschillen alleen in de gegevens die ze verwachten dat het verzoek bevat.

Verzoeken verzenden met behulp van algemene HTTP-methoden

Go is ingebouwd http pakket biedt een reeks functies en structuren die u kunt gebruiken om webservers te maken en HTTP-aanvragen te beheren. Het is een zeer robuust pakket en alle Go-webframeworks bouwen er op de een of andere manier bovenop. Het is een subpakket van Go's netto pakket.

Om een ​​HTTP-verzoek in Go te maken, kunt u de http. Nieuw verzoek() functie en stel de juiste methode, URL, headers en aanvraagtekst in. Nadat u het verzoek hebt gemaakt, kunt u de Go net/http pakketjes http. Cliënt{} structuur om het uit te voeren en het antwoord te ontvangen.

De volgende codevoorbeelden gebruiken vereist.in, een openbaar beschikbare API voor het testen van HTTP-aanvragen. Je kunt het gebruiken om GET-, POST-, PUT- en DELETE-verzoeken in je Go-programma's te testen.

POST-verzoek

De onderstaande code is een functie die een POST-verzoek naar de /api/users eindpunt van reqres.in om een ​​nieuwe gebruiker met een naam en een taak aan te maken.

pakket voornaamst

importeren (
"bytes"
"codering/json"
"fmt"
"io"
"net/http"
)

funcmaakGebruiker(naam, baan snaar) {
fmt. Println("Gebruiker aanmaken...")

apiUrl := " https://reqres.in/api/users"
gebruikersgegevens := []byte(`{"naam":"` + naam + `","baan":"` + baan + `"}`)

// maak een nieuw http-verzoek aan
verzoek, fout := http. Nieuw verzoek("NA", apiUrl, bytes. NewBuffer (gebruikersgegevens))
verzoek. Koptekst. Set("Content-Type", "toepassing/json; tekenset=utf-8")

// verstuur het verzoek
klant := &http. Cliënt{}
reactie, fout := klant. Doen (verzoek)

als fout!= nihil {
fmt. Println (fout)
}

responseBody, fout := io. Alles lezen (antwoord. Lichaam)

als fout!= nihil {
fmt. Println (fout)
}

formattedData := formatJSON(responseBody)
fmt. Println("Toestand: ", antwoord. Toestand)
fmt. Println("Reactie lichaam: ", geformatteerde gegevens)

// geheugen opschonen na uitvoering
verschuiven antwoord. Lichaam. Dichtbij()
}

formaatJSON is een aangepaste functie die u kunt schrijven om de uitvoergegevens op te maken. Zo kunt u het implementeren:

// functie om JSON-gegevens te formatteren
funcformaatJSON(gegevens []byte)snaar {
var bytes uit. Buffer
fout := json. Inspringen(&out, gegevens, "", " ")

als fout!= nihil {
fmt. Println (fout)
}

d := uit. Bytes()
opbrengstsnaar(D)
}

U kunt bellen naar de maakGebruiker() functie in een programma als dit:

funcvoornaamst() {
fmt. Println("POST-aanvraag maken...")
maakGebruiker("Tim Omolana", "Auteur")
}

Wanneer u het programma in een terminal uitvoert, gebruikt u de ga rennen opdracht, ziet u de uitvoer als volgt:

KRIJG verzoek

De volgende code is een functie die een GET-verzoek verzendt om een ​​gebruiker op te halen van de reqres.in-server met behulp van zijn unieke ID.

// main.go
funcgetGebruiker(ID kaart snaar) {
fmt. Println("Gebruiker ophalen op ID...")

// maak een GET-verzoek aan de API om de gebruiker op ID te krijgen
apiUrl := " https://reqres.in/api/users/" + identiteitskaart
verzoek, fout := http. Nieuw verzoek("KRIJGEN", apiUrl, nihil)

als fout!= nihil {
fmt. Println (fout)
}

verzoek. Koptekst. Set("Content-Type", "toepassing/json; tekenset=utf-8")

klant := &http. Cliënt{}
reactie, fout := klant. Doen (verzoek)

als fout!= nihil {
fmt. Println (fout)
}

responseBody, fout := io. Alles lezen (antwoord. Lichaam)

als fout!= nihil {
fmt. Println (fout)
}

formattedData := formatJSON(responseBody)
fmt. Println("Toestand: ", antwoord. Toestand)
fmt. Println("Reactie lichaam: ", geformatteerde gegevens)

// geheugen opschonen na uitvoering
verschuiven antwoord. Lichaam. Dichtbij()
}

Een GET-verzoek verzendt geen gegevens naar de server, dus het accepteert of verzendt geen verzoek naar de server wanneer het wordt gemaakt. Zo ziet een voorbeeldaanroep van de bovenstaande functie eruit:

funcvoornaamst() {
fmt. Println("GET-verzoek maken...")
getGebruiker("2")
}

Uitgang:

PUT-verzoek

Het PUT-verzoek lijkt erg op een POST-verzoek omdat het ook gegevens naar de server stuurt. Het grote verschil is dat POST een nieuwe bron maakt terwijl PUT een bestaande bijwerkt.

Hier is een implementatie van een PUT-verzoek:

// main.go
funcupdateGebruiker(naam, functie, id snaar) {
fmt. Println("Gebruiker wordt bijgewerkt...")

// doe een PUT-verzoek naar de API om de gebruiker bij te werken
apiUrl := " https://reqres.in/api/users/" + identiteitskaart
gebruikersgegevens := []byte(`{"naam":"` + naam + `","baan":"` + baan + `"}`)

// maak een nieuw http PUT-verzoek aan
verzoek, fout := http. Nieuw verzoek("NEERZETTEN", apiUrl, bytes. NewBuffer (gebruikersgegevens))
verzoek. Koptekst. Set("Content-Type", "toepassing/json; tekenset=utf-8")

// Resterende functiebody van createUser-functie...
// Doe een verzoek, krijg antwoord en wis het geheugen...
}

Uit deze code kunt u zien dat de enige verschillen tussen het PUT-verzoek en het POST-verzoek hierboven de naam van de methode en de URL zijn. Wanneer u een PUT gebruikt om bestaande gegevens bij te werken, moet u de id aan de verzoek-URL toevoegen. Een voorbeeldaanroep van deze functie ziet er als volgt uit:

hoofdfunctie() {
// werk de invoer bij met de ID 2.
updateGebruiker("Tim nieuwe naam", "Stafschrijver", "2")
}

De bovenstaande code werkt de gebruiker bij en produceert de volgende uitvoer:

Verwijder verzoek

Gebruik de aanvraagmethode DELETE om een ​​verwijderbewerking op een webserver uit te voeren. Een verwijderverzoek verwijdert de resource die wordt geïdentificeerd door de URI. Een DELETE-verzoek in Go ziet er als volgt uit:

funcVerwijder gebruiker(ID kaart snaar) {
fmt. Println("Gebruiker verwijderen...")
// maak een DELETE-verzoek aan de API om de gebruiker te verwijderen
apiUrl := " https://reqres.in/api/users/" + identiteitskaart

// maak een nieuw http-verzoek aan
verzoek, fout := http. Nieuw verzoek("VERWIJDEREN", apiUrl, nihil)
verzoek. Koptekst. Set("Content-Type", "toepassing/json; tekenset=utf-8")

klant := &http. Cliënt{}
reactie, fout := klant. Doen (verzoek)
als fout!= nihil {
fmt. Println (fout)
}

fmt. Println("Toestand: ", antwoord. Toestand)
}

Een DELETE-verzoek accepteert noch retourneert een body, vandaar dat het niet nodig is om het JSON-verzoek en de antwoordbody te parseren of te formatteren. Het antwoord retourneert alleen een status om succes of falen aan te geven. Zo ziet een voorbeeldaanroep van de functie eruit met zijn uitvoer:

funcvoornaamst() {
fmt. Println("WISSEN-verzoek aan het maken...")
Verwijder gebruiker("2")
}

Uitgang:

Bespaar tijd door gebruik te maken van de http. Na() En http. Krijgen() methodes uit de net/http pakket te maken NA En KRIJGEN aanvragen rechtstreeks, zonder gebruik te maken van de Nieuw verzoek() functie en de Cliënt{} structuur om het verzoek afzonderlijk te maken en te doen. Bekijk de net/http-documentatie voor meer informatie.

HTTP-verzoeken doen in Go-applicaties

De http pakket in Go biedt alles wat nodig is om HTTP-verzoeken te doen en reacties in Go-applicaties af te handelen. Met de functies en structuren die door het pakket worden geboden, kunt u verschillende soorten verzoeken maken en verzenden, zoals GET, POST, PUT, DELETE en nog veel meer.

Dit maakt het gemakkelijk om webapplicaties in Go te bouwen die kunnen communiceren met andere webservices en API's. Een goede manier om te krijgen meer vertrouwd met het doen van HTTP-verzoeken in Go is door een applicatie te bouwen die verzoeken doet aan een andere REST API van de jouwe.