Slanje HTTP zahtjeva ključno je za svaku aplikaciju koja treba komunicirati putem interneta. Saznajte kako poslati razne HTTP zahtjeve koristeći Go.

Jedno od temeljnih načela koja upravljaju funkcioniranjem World Wide Weba je razmjena zahtjeva i odgovora. Kada pošaljete zahtjev za pristup web stranici, poslužitelj odgovara odgovarajućim podacima.

Popularni protokoli koji upravljaju različitim vrstama internetske komunikacije uključuju HTTP (Hypertext Transfer Protocol), FTP (Protokol za prijenos datoteka), i SMTP (Jednostavan protokol za prijenos pošte).

HTTP je protokol koji obično koristite kada pregledavate web-mjesto ili upotrebljavate aplikaciju omogućenu za web. Također možete raditi s HTTP zahtjevima iz mnogih programskih jezika, uključujući Go.

Što je HTTP zahtjev?

HTTP definira kako klijenti, poput web preglednika, šalju zahtjeve poslužiteljima koji zatim vraćaju odgovor. HTTP zahtjev sadrži informacije o resursu kojem klijent pokušava pristupiti. Poruka zahtjeva obično sadrži URL koji identificira resurs i druge neobavezne podatke poput zaglavlja i parametara upita.

instagram viewer

Tamo su nekoliko vrsta HTTP zahtjeva, uključujući GET, POST, PUT, DELETE, HEAD, OPTIONS i CONNECT. Prve četiri vrste metoda su najčešće; one odražavaju CRUD operacije čitanja, stvaranja, ažuriranja i brisanja.

Tip zahtjeva PUT često se koristi naizmjenično s tipom zahtjeva PATCH. Postižu istu svrhu, samo se razlikuju u podacima koje očekuju od zahtjeva.

Slanje zahtjeva korištenjem uobičajenih HTTP metoda

Go je ugrađen http paket pruža skup funkcija i struktura koje možete koristiti za stvaranje web poslužitelja i upravljanje HTTP zahtjevima. To je vrlo robustan paket i svi Go web okviri nadograđuju se na ovaj ili onaj način. To je potpaket Go-a neto paket.

Za izradu HTTP zahtjeva u Go, možete koristiti http. Novi zahtjev() funkciju i postavite odgovarajuću metodu, URL, zaglavlja i tijelo zahtjeva. Nakon što izradite zahtjev, možete koristiti Go net/http paketa http. Klijent{} strukturu za pokretanje i primanje odgovora.

Koriste se sljedeći uzorci koda reqres.in, javno dostupan API za testiranje HTTP zahtjeva. Možete ga koristiti za testiranje zahtjeva GET, POST, PUT i DELETE u svojim Go programima.

POST zahtjev

Donji kod je funkcija koja šalje POST zahtjev na /api/users krajnja točka reqres.in za stvaranje novog korisnika s imenom i poslom.

paket glavni

uvoz (
"bajtovi"
"kodiranje/json"
"fmt"
"jo"
"net/http"
)

funkcreateUser(ime, posao niz) {
fmt. Println("Stvaranje korisnika...")

apiUrl := " https://reqres.in/api/users"
korisnički podaci := []bajt(`{"ime":"` + ime + `","posao":"` + posao + `"}`)

// kreiraj novi http zahtjev
zahtjev, greška := http. Novi zahtjev("POST", apiUrl, bajtovi. NewBuffer (userData))
zahtjev. Zaglavlje. Postavi ("Vrsta sadržaja", "aplikacija/json; charset=utf-8")

// poslati zahtjev
klijent := &http. Klijent{}
odgovor, greška := klijent. učiniti (zahtjev)

ako pogreška != nula {
fmt. Println (greška)
}

odgovor Tijelo, pogreška := io. ReadAll (odgovor. Tijelo)

ako pogreška != nula {
fmt. Println (greška)
}

formattedData := formatJSON(responseBody)
fmt. Println("Status: ", odgovor. Status)
fmt. Println("Tijelo odgovora: ", formatirani podaci)

// očisti memoriju nakon izvršenja
odgoditi odgovor. Tijelo. Zatvoriti()
}

formatJSON je prilagođena funkcija koju možete napisati za formatiranje izlaznih podataka. Evo kako to možete implementirati:

// funkcija za formatiranje JSON podataka
funkformatJSON(podaci []bajt)niz {
var van bajtova. Pufer
pogreška := json. Uvlaka(&out, podaci, "", " ")

ako pogriješiti != nula {
fmt. Println (greška)
}

d := van. Bajtovi()
povratakniz(d)
}

Možete nazvati createUser() funkcionirati u ovakvom programu:

funkglavni() {
fmt. Println("Izrada POST zahtjeva...")
createUser("Tim Omolana", "Pisac")
}

Kada pokrenete program u terminalu, koristeći Idi trči naredba, vidjet ćete izlaz poput ovog:

DOBITI zahtjev

Sljedeći kod je funkcija koja šalje GET zahtjev za dohvaćanje korisnika s poslužitelja reqres.in koristeći njihov jedinstveni ID.

// main.go
funkgetUser(iskaznica niz) {
fmt. Println("Dohvaćanje korisnika prema ID-u...")

// napravite GET zahtjev API-ju za dobivanje korisnika prema ID-u
apiUrl := " https://reqres.in/api/users/" + id
zahtjev, greška := http. Novi zahtjev("DOBITI", apiUrl, nula)

ako pogreška != nula {
fmt. Println (greška)
}

zahtjev. Zaglavlje. Postavi ("Vrsta sadržaja", "aplikacija/json; charset=utf-8")

klijent := &http. Klijent{}
odgovor, greška := klijent. učiniti (zahtjev)

ako pogreška != nula {
fmt. Println (greška)
}

odgovor Tijelo, pogreška := io. ReadAll (odgovor. Tijelo)

ako pogreška != nula {
fmt. Println (greška)
}

formattedData := formatJSON(responseBody)
fmt. Println("Status: ", odgovor. Status)
fmt. Println("Tijelo odgovora: ", formatirani podaci)

// očisti memoriju nakon izvršenja
odgoditi odgovor. Tijelo. Zatvoriti()
}

GET zahtjev ne šalje podatke poslužitelju tako da ne prihvaća niti šalje poslužitelju tijelo zahtjeva kada se napravi. Evo kako će izgledati primjer poziva gornje funkcije:

funkglavni() {
fmt. Println("Izrada GET zahtjeva...")
getUser("2")
}

Izlaz:

PUT zahtjev

PUT zahtjev je vrlo sličan POST zahtjevu jer također šalje podatke poslužitelju. Glavna razlika je u tome što POST stvara novi resurs dok PUT ažurira postojeći.

Evo implementacije PUT zahtjeva:

// main.go
funkupdateUser(ime, posao, ID niz) {
fmt. Println("Ažuriranje korisnika...")

// napravite PUT zahtjev API-ju za ažuriranje korisnika
apiUrl := " https://reqres.in/api/users/" + id
korisnički podaci := []bajt(`{"ime":"` + ime + `","posao":"` + posao + `"}`)

// kreiraj novi http PUT zahtjev
zahtjev, greška := http. Novi zahtjev("STAVITI", apiUrl, bajtovi. NewBuffer (userData))
zahtjev. Zaglavlje. Postavi ("Vrsta sadržaja", "aplikacija/json; charset=utf-8")

// Preostalo tijelo funkcije iz funkcije createUser...
// Postavite zahtjev, dobijte odgovor i očistite memoriju...
}

Iz ovog koda možete vidjeti jedine razlike između PUT zahtjeva i POST zahtjeva iznad su naziv metode i URL. Kada koristite PUT za ažuriranje postojećih podataka, morat ćete dodati ID URL-u zahtjeva. Primjer poziva ove funkcije izgledao bi ovako:

func main() {
// ažuriraj unos s ID-om 2.
updateUser("Tim Newname", "Standardni pisac", "2")
}

Gornji kod ažurira korisnika i proizvodi sljedeći izlaz:

IZBRIŠI zahtjev

Koristite metodu zahtjeva DELETE za izvođenje operacije brisanja na web poslužitelju. Zahtjev za brisanje briše resurs identificiran URI-jem. Zahtjev za DELETE u Gou izgleda ovako:

funkdeleteUser(iskaznica niz) {
fmt. Println("Brisanje korisnika...")
// napravite DELETE zahtjev API-ju za brisanje korisnika
apiUrl := " https://reqres.in/api/users/" + id

// kreiraj novi http zahtjev
zahtjev, greška := http. Novi zahtjev("IZBRISATI", apiUrl, nula)
zahtjev. Zaglavlje. Postavi ("Vrsta sadržaja", "aplikacija/json; charset=utf-8")

klijent := &http. Klijent{}
odgovor, greška := klijent. učiniti (zahtjev)
ako pogreška != nula {
fmt. Println (greška)
}

fmt. Println("Status: ", odgovor. Status)
}

DELETE zahtjev niti prihvaća niti vraća tijelo, stoga nema potrebe za raščlanjivanjem ili formatiranjem JSON zahtjeva i tijela odgovora. Odgovor samo vraća status koji označava uspjeh ili neuspjeh. Evo kako izgleda primjer poziva funkcije s njezinim izlazom:

funkglavni() {
fmt. Println("Izrada zahtjeva za DELETE...")
deleteUser("2")
}

Izlaz:

Uštedite vrijeme korištenjem http. objavi() i http. Dobiti() metode iz net/http paket za izradu POST i DOBITI zahtjeva izravno, bez potrebe za korištenjem Novi zahtjev() funkcija i Klijent{} struktura za izradu i izradu zahtjeva zasebno. Provjerite net/http dokumentacija za više informacija.

Izrada HTTP zahtjeva u Go aplikacijama

The http paket u Go pruža sve što je potrebno za izradu HTTP zahtjeva i rukovanje odgovorima u Go aplikacijama. Funkcije i strukture koje pruža paket omogućuju vam stvaranje i slanje različitih vrsta zahtjeva kao što su GET, POST, PUT, DELETE i mnogi drugi.

To olakšava izradu web aplikacija u Gou koje mogu komunicirati s drugim web uslugama i API-jima. Dobar način da se dobije više upoznati sa slanjem HTTP zahtjeva u Go je izrada aplikacije koja šalje zahtjeve drugom REST API-ju tvoje.