At sende en HTTP-anmodning er nøglen til enhver app, der skal kommunikere over internettet. Find ud af, hvordan du sender en række HTTP-anmodninger ved hjælp af Go.

Et af de grundlæggende principper, der styrer, hvordan World Wide Web fungerer, er udvekslingen af ​​anmodninger og svar. Når du sender en anmodning om at få adgang til en webside, svarer serveren med passende data.

Populære protokoller, der styrer forskellige typer internetkommunikation omfatter HTTP (Hypertext Transfer Protocol), FTP (Filoverførselsprotokol), og SMTP (Simple Mail Transfer Protocol).

HTTP er den protokol, du typisk vil bruge, når du ser et websted eller bruger en webaktiveret app. Du kan også arbejde med HTTP-anmodninger fra mange programmeringssprog, inklusive Go.

Hvad er en HTTP-anmodning?

HTTP definerer, hvordan klienter, ligesom webbrowsere, sender anmodninger til servere, som derefter returnerer et svar. En HTTP-anmodning indeholder oplysninger om en ressource, som klienten forsøger at få adgang til. Forespørgselsmeddelelsen omfatter typisk en URL, der identificerer ressourcen og andre valgfrie data såsom overskrifter og forespørgselsparametre.

instagram viewer

Der er flere typer HTTP-anmodninger, herunder GET, POST, PUT, DELETE, HEAD, OPTIONS og CONNECT. De første fire metodetyper er de mest almindelige; de afspejler CRUD-operationerne henholdsvis læst, oprettet, opdateret og slettet.

PUT-anmodningstypen bruges ofte i flæng med PATCH-anmodningstypen. De opnår det samme formål, de er bare forskellige i de data, de forventer, at anmodningen skal indeholde.

Afsendelse af anmodninger ved hjælp af almindelige HTTP-metoder

Go's indbygget http pakke giver et sæt funktioner og strukturer, du kan bruge til at oprette webservere og administrere HTTP-anmodninger. Det er en meget robust pakke, og alle Go-webframeworks bygger ovenpå den på den ene eller den anden måde. Det er en underpakke af Go's net pakke.

For at oprette en HTTP-anmodning i Go, kan du bruge http. NewRequest() funktion og indstil den passende metode, URL, overskrifter og anmodningstekst. Når du har oprettet anmodningen, kan du bruge Go net/http pakkens http. Klient{} struktur til at køre det og modtage svaret.

Følgende kodeeksempler bruger reqres.in, en offentlig tilgængelig API til test af HTTP-anmodninger. Du kan bruge den til at teste GET-, POST-, PUT- og DELETE-anmodninger i dine Go-programmer.

POST-anmodning

Koden nedenfor er en funktion, der sender en POST-anmodning til /api/users endepunkt af reqres.in for at oprette en ny bruger med et navn og et job.

pakke vigtigste

importere (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)

funcoprette bruger(navn, job snor) {
fmt. Println("Opretter bruger...")

apiUrl := " https://reqres.in/api/users"
brugerdata := []byte(`{"navn":"` + navn + `","job":"` + job + `"}`)

// opret ny http-anmodning
anmodning, fejl := http. NewRequest("STOLPE", apiUrl, bytes. NewBuffer (brugerdata))
anmodning. Header. Sæt("Indholdstype", "applikation/json; charset=utf-8")

// send anmodningen
klient := &http. Klient{}
svar, fejl := klient. Gør (anmod)

hvis fejl != nul {
fmt. Println (fejl)
}

responseBody, fejl := io. Læs Alle (svar. Legeme)

hvis fejl != nul {
fmt. Println (fejl)
}

formattedData := formatJSON(responseBody)
fmt. Println("Status: ", respons. status)
fmt. Println("Svaret:", formateret data)

// Ryd op i hukommelsen efter udførelse
udsætte respons. Legeme. Tæt()
}

formatJSON er en brugerdefineret funktion, du kan skrive for at formatere outputdataene. Sådan kan du implementere det:

// funktion til at formatere JSON-data
funcformatJSON(data []byte)snor {
var ud bytes. Buffer
fejl := json. Indryk(&ud, data, "", " ")

hvis fejl!= nul {
fmt. Println (fejl)
}

d := ud. Bytes()
Vend tilbagesnor(d)
}

Du kan ringe til createUser() funktion i et program som dette:

funcvigtigste() {
fmt. Println("Laver POST-anmodning...")
opretteBruger("Tim Omolana", "Forfatter")
}

Når du kører programmet i en terminal, ved hjælp af løb kommando, vil du se output som dette:

FÅ anmodning

Følgende kode er en funktion, der sender en GET-anmodning for at hente en bruger fra reqres.in-serveren ved hjælp af deres unikke ID.

// main.go
funcgetBruger(id snor) {
fmt. Println("Henter bruger efter ID...")

// lav GET-anmodning til API for at få bruger efter ID
apiUrl := " https://reqres.in/api/users/" + id
anmodning, fejl := http. NewRequest("FÅ", apiUrl, nul)

hvis fejl != nul {
fmt. Println (fejl)
}

anmodning. Header. Sæt("Indholdstype", "applikation/json; charset=utf-8")

klient := &http. Klient{}
svar, fejl := klient. Gør (anmod)

hvis fejl != nul {
fmt. Println (fejl)
}

responseBody, fejl := io. Læs Alle (svar. Legeme)

hvis fejl != nul {
fmt. Println (fejl)
}

formattedData := formatJSON(responseBody)
fmt. Println("Status: ", respons. status)
fmt. Println("Svaret:", formateret data)

// Ryd op i hukommelsen efter udførelse
udsætte respons. Legeme. Tæt()
}

En GET-anmodning sender ikke data til serveren, så den accepterer eller sender ikke en anmodningstekst til serveren, når den foretages. Sådan ser et eksempelkald til funktionen ovenfor ud:

funcvigtigste() {
fmt. Println("Lager GET-anmodning...")
getUser("2")
}

Produktion:

PUT-anmodning

PUT-anmodningen minder meget om en POST-anmodning, fordi den også sender data til serveren. Den største forskel er, at POST opretter en ny ressource, mens PUT opdaterer en eksisterende.

Her er en implementering af en PUT-anmodning:

// main.go
funcopdatere Bruger(navn, job, id snor) {
fmt. Println("Opdaterer bruger...")

// lav PUT anmodning til API for at opdatere bruger
apiUrl := " https://reqres.in/api/users/" + id
brugerdata := []byte(`{"navn":"` + navn + `","job":"` + job + `"}`)

// opret ny http PUT-anmodning
anmodning, fejl := http. NewRequest("SÆTTE", apiUrl, bytes. NewBuffer (brugerdata))
anmodning. Header. Sæt("Indholdstype", "applikation/json; charset=utf-8")

// Resterende funktionstekst fra createUser-funktionen...
// Lav en anmodning, få svar og ryd hukommelsen...
}

Fra denne kode kan du se de eneste forskelle mellem PUT-anmodningen og POST-anmodningen ovenfor, er metodenavnet og URL'en. Når du bruger en PUT til at opdatere eksisterende data, skal du tilføje id'et til anmodningens URL. Et eksempelkald til denne funktion ville se sådan ud:

func main() {
// Opdater post med ID 2.
opdaterBruger("Tim Newname", "Stabsskribent", "2")
}

Ovenstående kode opdaterer brugeren og producerer følgende output:

SLET anmodning

Brug metoden DELETE-anmodning til at udføre en sletningshandling på en webserver. En sletteanmodning sletter den ressource, der er identificeret af URI'en. En DELETE-anmodning i Go ser sådan ud:

funcslet Bruger(id snor) {
fmt. Println("Sletter bruger...")
// lav DELETE-anmodning til API om at slette bruger
apiUrl := " https://reqres.in/api/users/" + id

// opret ny http-anmodning
anmodning, fejl := http. NewRequest("SLET", apiUrl, nul)
anmodning. Header. Sæt("Indholdstype", "applikation/json; charset=utf-8")

klient := &http. Klient{}
svar, fejl := klient. Gør (anmod)
hvis fejl != nul {
fmt. Println (fejl)
}

fmt. Println("Status: ", respons. status)
}

En DELETE-anmodning hverken accepterer eller returnerer en brødtekst, hvorfor det ikke er nødvendigt at parse eller formatere JSON-anmodnings- og svarteksten. Svaret returnerer kun en status for at angive succes eller fiasko. Sådan ser et eksempelkald til funktionen ud med dens output:

funcvigtigste() {
fmt. Println("Foretager SLET-anmodning...")
sletBruger("2")
}

Produktion:

Spar tid ved at bruge http. Stolpe() og http. Få() metoder fra net/http pakke at lave STOLPE og anmodninger direkte uden at skulle bruge NewRequest() funktion og Klient{} struktur for at oprette og fremsætte anmodningen separat. Tjek ud net/http dokumentation for mere information.

Fremstilling af HTTP-anmodninger i Go-applikationer

Det http pakke i Go giver alt det nødvendige for at lave HTTP-anmodninger og håndtere svar i Go-applikationer. Funktionerne og strukturerne i pakken giver dig mulighed for at oprette og sende forskellige slags anmodninger som GET, POST, PUT, DELETE og mange flere.

Dette gør det nemt at bygge webapplikationer i Go, der kan interagere med andre webtjenester og API'er. En god måde at få mere fortrolig med at lave HTTP-anmodninger i Go er ved at bygge en applikation, der sender anmodninger til en anden REST API af din.