A HTTP-kérés küldése kulcsfontosságú minden olyan alkalmazás számára, amelynek az interneten keresztül kell kommunikálnia. Ismerje meg, hogyan küldhet különféle HTTP-kéréseket a Go használatával.

A világháló működését irányító egyik alapelv a kérések és válaszok cseréje. Amikor kérelmet küld egy weboldal elérésére, a szerver a megfelelő adatokkal válaszol.

A különböző típusú internetes kommunikációt szabályozó népszerű protokollok közé tartozik HTTP (Hypertext Transfer Protocol), FTP (Fájlátviteli protokoll), és SMTP (Simple Mail Transfer Protocol).

A HTTP az a protokoll, amelyet általában akkor használ, amikor megtekint egy webhelyet vagy egy web-kompatibilis alkalmazást használ. Számos programozási nyelvből, köztük a Go-ból származó HTTP-kérésekkel is dolgozhat.

Mi az a HTTP-kérés?

A HTTP határozza meg, hogy az ügyfelek, például a webböngészők hogyan küldenek kéréseket a szervereknek, amelyek aztán választ adnak vissza. A HTTP-kérés információkat tartalmaz az ügyfél által elérni kívánt erőforrásról. A kérésüzenet jellemzően egy URL-t tartalmaz, amely azonosítja az erőforrást, és egyéb opcionális adatokat, például fejléceket és lekérdezési paramétereket.

instagram viewer

Vannak többféle HTTP kérés, beleértve a GET, POST, PUT, DELETE, HEAD, OPTIONS és CONNECT. Az első négy módszertípus a leggyakoribb; tükrözik a CRUD olvasási, létrehozási, frissítési és törlési műveleteit.

A PUT kéréstípust gyakran felváltva használják a PATCH kéréstípussal. Ugyanazt a célt érik el, csak abban különböznek, hogy milyen adatokat várnak el a kérelemben.

Kérések küldése általános HTTP-módszerekkel

A Go beépített http csomag funkciókat és struktúrákat biztosít, amelyek segítségével webszervereket hozhat létre és HTTP-kéréseket kezelhet. Ez egy nagyon robusztus csomag, és minden Go webes keretrendszer valamilyen módon erre épül. Ez a Go alcsomagja háló csomag.

HTTP-kérés létrehozásához a Go alkalmazásban használhatja a http. NewRequest() függvényt, és állítsa be a megfelelő metódust, URL-t, fejléceket és kérés törzsét. A kérelem létrehozása után használhatja a Go net/http csomagok http. Ügyfél{} futtatásához és a válasz fogadásához.

A következő kódmintákat használjuk reqres.in, egy nyilvánosan elérhető API a HTTP-kérelmek tesztelésére. Használhatja a GET, POST, PUT és DELETE kérések tesztelésére a Go programjaiban.

POST-kérés

Az alábbi kód egy olyan funkció, amely POST kérést küld a /api/users A reqres.in végpontja új felhasználó létrehozásához névvel és feladattal.

csomag fő-

import (
"bájt"
"kódolás/json"
"fmt"
"io"
"net/http"
)

funcfelhasználó létrehozása(név, munkakör húr) {
fmt. Println("Felhasználó létrehozása...")

apiUrl := " https://reqres.in/api/users"
felhasználói adatok := []byte(`{"név":"` + név + `","munka":"` + munka + `"}`)

// új http kérés létrehozása
kérés, hiba := http. NewRequest("POST", apiUrl, bájtok. NewBuffer (felhasználói adatok))
kérés. Fejléc. Készlet("Tartalom típus", "alkalmazás/json; charset=utf-8")

// küldje el a kérést
kliens := &http. Ügyfél{}
válasz, hiba := kliens. Tedd (kérés)

ha hiba != nulla {
fmt. Println (hiba)
}

responseBody, error := io. Mindent olvas (válasz. Test)

ha hiba != nulla {
fmt. Println (hiba)
}

formattedData := formatJSON(responseBody)
fmt. Println("Állapot:", válasz. Állapot)
fmt. Println("Választörzs:", formattedData)

// memória tisztítása végrehajtás után
elhalasztja válasz. Test. Bezárás()
}

formatJSON egy egyéni függvény, amelyet írhat a kimeneti adatok formázásához. Így valósíthatja meg:

// függvény a JSON-adatok formázásához
funcformatJSON(adat []byte)húr {
var ki bájtokat. Puffer
hiba := json. Behúzás(&out, adat, "", " ")

ha hiba! = nulla {
fmt. Println (hiba)
}

d := ki. bájt()
Visszatéréshúrd)
}

Felhívhatja a felhasználó létrehozása() funkció egy ilyen programban:

funcfő-() {
fmt. Println("POST kérés készítése...")
felhasználó létrehozása("Tim Omolana", "Író")
}

Amikor a programot terminálon futtatja, használja a menj futni parancsot, a következő kimenetet fogja látni:

GET Kérés

A következő kód egy olyan függvény, amely GET-kérést küld a felhasználó lekérésére a reqres.in kiszolgálóról az egyedi azonosítójuk használatával.

// main.go
funcgetUser(id húr) {
fmt. Println("Felhasználó lekérése azonosító alapján...")

// küldjön GET-kérelmet az API-nak a felhasználó azonosító szerinti lekéréséhez
apiUrl := " https://reqres.in/api/users/" + id
kérés, hiba := http. NewRequest("KAP", apiUrl, nulla)

ha hiba != nulla {
fmt. Println (hiba)
}

kérés. Fejléc. Készlet("Tartalom típus", "alkalmazás/json; charset=utf-8")

kliens := &http. Ügyfél{}
válasz, hiba := kliens. Tedd (kérés)

ha hiba != nulla {
fmt. Println (hiba)
}

responseBody, error := io. Mindent olvas (válasz. Test)

ha hiba != nulla {
fmt. Println (hiba)
}

formattedData := formatJSON(responseBody)
fmt. Println("Állapot:", válasz. Állapot)
fmt. Println("Választörzs:", formattedData)

// memória tisztítása végrehajtás után
elhalasztja válasz. Test. Bezárás()
}

A GET kérés nem küld adatokat a szervernek, így nem fogad el vagy küld el kéréstörzset a szervernek, amikor megtörténik. Így fog kinézni a fenti függvény egy példahívása:

funcfő-() {
fmt. Println("GET kérés benyújtása...")
getUser("2")
}

Kimenet:

PUT kérés

A PUT kérés nagyon hasonlít a POST kérésre, mert adatokat is küld a szervernek. A fő különbség az, hogy a POST új erőforrást hoz létre, míg a PUT frissít egy meglévőt.

Íme egy PUT-kérés megvalósítása:

// main.go
funcupdateUser(név, munkakör, azonosító húr) {
fmt. Println("Felhasználó frissítése...")

// küldjön PUT kérést az API-nak a felhasználó frissítéséhez
apiUrl := " https://reqres.in/api/users/" + id
felhasználói adatok := []byte(`{"név":"` + név + `","munka":"` + munka + `"}`)

// új http PUT kérés létrehozása
kérés, hiba := http. NewRequest("PUT", apiUrl, bájtok. NewBuffer (felhasználói adatok))
kérés. Fejléc. Készlet("Tartalom típus", "alkalmazás/json; charset=utf-8")

// A fennmaradó függvénytörzs a createUser függvényből...
// Kérelem benyújtása, válasz lekérése és memória törlése...
}

Ebből a kódból láthatja, hogy a fenti PUT kérés és a POST kérés között csak a metódus neve és az URL különbözik. Ha PUT-t használ a meglévő adatok frissítéséhez, hozzá kell adnia az azonosítót a kérelem URL-jéhez. Ennek a függvénynek a mintahívása így néz ki:

func main() {
// bejegyzés frissítése a 2. azonosítóval.
updateUser("Tim Newname", "Személyi író", "2")
}

A fenti kód frissíti a felhasználót, és a következő kimenetet hozza létre:

TÖRLÉS kérés

Használja a DELETE kérési módszert törlési művelet végrehajtásához egy webszerveren. A törlési kérelem törli az URI által azonosított erőforrást. Egy TÖRLÉS kérés a Go alkalmazásban így néz ki:

funcdeleteUser(id húr) {
fmt. Println("Felhasználó törlése...")
// küldjön DELETE kérést az API-nak a felhasználó törléséhez
apiUrl := " https://reqres.in/api/users/" + id

// új http kérés létrehozása
kérés, hiba := http. NewRequest("TÖRÖL", apiUrl, nulla)
kérés. Fejléc. Készlet("Tartalom típus", "alkalmazás/json; charset=utf-8")

kliens := &http. Ügyfél{}
válasz, hiba := kliens. Tedd (kérés)
ha hiba != nulla {
fmt. Println (hiba)
}

fmt. Println("Állapot:", válasz. Állapot)
}

A DELETE kérés nem fogad el és nem ad vissza törzset, ezért nincs szükség a JSON-kérelem és válasz törzsének elemzésére vagy formázására. A válasz csak a sikert vagy a kudarcot jelző állapotot ad vissza. Így néz ki a függvény mintahívása a kimenetével:

funcfő-() {
fmt. Println("TÖRLÉS kérés benyújtása...")
deleteUser("2")
}

Kimenet:

Takarítson meg időt a http. Post() és http. Kap() módszerek a net/http csomag elkészítése POST és KAP közvetlenül kéri, anélkül, hogy a NewRequest() funkció és a Ügyfél{} a kérés külön létrehozásához és benyújtásához. Nézze meg a net/http dokumentáció további információért.

HTTP-kérések készítése a Go alkalmazásokban

A http csomag a Goban mindent biztosít, ami a HTTP-kérésekhez és a válaszok kezeléséhez szükséges a Go alkalmazásokban. A csomag által biztosított funkciók és struktúrák lehetővé teszik különféle kérések létrehozását és küldését, mint például GET, POST, PUT, DELETE és még sok más.

Ez megkönnyíti a Go-ban olyan webalkalmazások készítését, amelyek képesek együttműködni más webszolgáltatásokkal és API-kkal. Jó módja annak, hogy megszerezzük jobban ismeri a HTTP-kéréseket a Go-ban, ha olyan alkalmazást készít, amely kéréseket küld egy másik REST API-hoz a tiéd.