Pošiljanje zahteve HTTP je ključno za vsako aplikacijo, ki mora komunicirati prek interneta. Ugotovite, kako poslati različne zahteve HTTP z Go.
Eno od temeljnih načel delovanja svetovnega spleta je izmenjava zahtev in odgovorov. Ko pošljete zahtevo za dostop do spletne strani, se strežnik odzove z ustreznimi podatki.
Priljubljeni protokoli, ki urejajo različne vrste internetne komunikacije, vključujejo HTTP (protokol za prenos hiperteksta), FTP (Protokol za prenos datotek) in SMTP (Enostaven protokol za prenos pošte).
HTTP je protokol, ki ga običajno uporabljate, ko si ogledujete spletno mesto ali uporabljate spletno omogočeno aplikacijo. Prav tako lahko delate z zahtevami HTTP iz številnih programskih jezikov, vključno z Go.
Kaj je zahteva HTTP?
HTTP določa, kako odjemalci, tako kot spletni brskalniki, pošiljajo zahteve strežnikom, ki nato vrnejo odgovor. Zahteva HTTP vsebuje informacije o viru, do katerega odjemalec poskuša dostopati. Sporočilo zahteve običajno vsebuje URL, ki identificira vir, in druge neobvezne podatke, kot so glave in parametri poizvedbe.
obstajajo več vrst HTTP zahtev, vključno z GET, POST, PUT, DELETE, HEAD, OPTIONS in CONNECT. Prve štiri vrste metod so najpogostejše; odražajo operacije CRUD za branje, ustvarjanje, posodabljanje in brisanje.
Vrsta zahteve PUT se pogosto uporablja zamenljivo z vrsto zahteve PATCH. Dosegajo isti namen, razlikujejo se le v podatkih, ki jih pričakujejo od zahteve.
Pošiljanje zahtevkov z običajnimi metodami HTTP
Go je vgrajen http paket ponuja nabor funkcij in struktur, ki jih lahko uporabite za ustvarjanje spletnih strežnikov in upravljanje zahtev HTTP. To je zelo robusten paket in vsa spletna ogrodja Go so na tak ali drugačen način nadgrajena. Je podpaket Go's mreža paket.
Če želite ustvariti zahtevo HTTP v Go, lahko uporabite http. NewRequest() funkcijo in nastavite ustrezno metodo, URL, glave in telo zahteve. Ko ustvarite zahtevo, lahko uporabite Go net/http paketi http. odjemalec{} strukturo, da jo zaženete in prejmete odgovor.
Naslednji vzorci kode uporabljajo reqres.in, javno dostopen API za testiranje zahtev HTTP. Uporabite ga lahko za testiranje zahtev GET, POST, PUT in DELETE v svojih programih Go.
POST Zahteva
Spodnja koda je funkcija, ki pošlje zahtevo POST na /api/users končna točka reqres.in za ustvarjanje novega uporabnika z imenom in opravilom.
paket glavni
uvoz (
"bajti"
"kodiranje/json"
"fmt"
"io"
"net/http"
)funkcreateUser(ime, služba vrvica) {
fmt. Println("Ustvarjanje uporabnika ...")apiUrl := " https://reqres.in/api/users"
uporabniški podatki := []bajt(`{"ime":"` + ime + `","delo":"` + služba + `"}`)// ustvari novo http zahtevo
zahteva, napaka := http. NewRequest("POST", apiUrl, bajtov. NewBuffer (userData))
prošnja. Glava. Set ("Vrsta vsebine", "aplikacija/json; charset=utf-8")// pošlji zahtevo
stranka := &http. odjemalec{}
odziv, napaka := stranka. Naredi (zahtevaj)če napaka!= nič {
fmt. Println (napaka)
}responseBody, napaka := io. ReadAll (odgovor. telo)
če napaka!= nič {
fmt. Println (napaka)
}formattedData := formatJSON(responseBody)
fmt. Println("Stanje: ", odgovor. Stanje)
fmt. Println("Telo odgovora: ", formatirani podatki)
// počisti pomnilnik po izvedbi
odložiti odgovor. Telo. Zapri()
}
formatJSON je funkcija po meri, ki jo lahko napišete za oblikovanje izhodnih podatkov. Tukaj je opisano, kako ga lahko implementirate:
// funkcija za formatiranje podatkov JSON
funkformatJSON(podatki []bajt)vrvica {
var ven bajtov. Medpomnilnik
napaka := json. Zamik(&out, podatki, "", " ")če napaka!= nič {
fmt. Println (napaka)
}
d := ven. bajti()
vrnitevvrvica(d)
}
Lahko pokličete createUser() deluje v programu, kot je ta:
funkglavni() {
fmt. Println("Izdelava zahteve POST ...")
createUser("Tim Omolana", "pisatelj")
}
Ko zaženete program v terminalu, z uporabo pojdi teči ukaz, boste videli izpis, kot je ta:
PRIDOBITE zahtevo
Naslednja koda je funkcija, ki pošlje zahtevo GET za pridobitev uporabnika s strežnika reqres.in z uporabo njegovega edinstvenega ID-ja.
// main.go
funkgetUser(id vrvica) {
fmt. Println("Pridobivanje uporabnika po ID-ju ...")// naredi zahtevo GET za API, da dobi uporabnika po ID-ju
apiUrl := " https://reqres.in/api/users/" + id
zahteva, napaka := http. NewRequest("DOBITI", apiUrl, nič)če napaka!= nič {
fmt. Println (napaka)
}prošnja. Glava. Set ("Vrsta vsebine", "aplikacija/json; charset=utf-8")
stranka := &http. odjemalec{}
odziv, napaka := stranka. Naredi (zahtevaj)če napaka!= nič {
fmt. Println (napaka)
}responseBody, napaka := io. ReadAll (odgovor. telo)
če napaka!= nič {
fmt. Println (napaka)
}formattedData := formatJSON(responseBody)
fmt. Println("Stanje: ", odgovor. Stanje)
fmt. Println("Telo odgovora: ", formatirani podatki)
// počisti pomnilnik po izvedbi
odložiti odgovor. Telo. Zapri()
}
Zahteva GET ne pošilja podatkov strežniku, zato ne sprejme ali pošlje telesa zahteve strežniku, ko je narejena. Tukaj je videti primer klica zgornje funkcije:
funkglavni() {
fmt. Println("Izdelava zahteve GET ...")
getUser("2")
}
Izhod:
PUT Zahteva
Zahteva PUT je zelo podobna zahtevi POST, ker tudi pošilja podatke strežniku. Glavna razlika je v tem, da POST ustvari nov vir, PUT pa posodobi obstoječega.
Tukaj je implementacija zahteve PUT:
// main.go
funkupdateUser(ime, služba, id vrvica) {
fmt. Println("Posodabljanje uporabnika ...")// naredi zahtevo PUT za API za posodobitev uporabnika
apiUrl := " https://reqres.in/api/users/" + id
uporabniški podatki := []bajt(`{"ime":"` + ime + `","delo":"` + služba + `"}`)// ustvari novo zahtevo http PUT
zahteva, napaka := http. NewRequest("POSTAVI", apiUrl, bajtov. NewBuffer (userData))
prošnja. Glava. Set ("Vrsta vsebine", "aplikacija/json; charset=utf-8")
// Preostalo telo funkcije iz funkcije createUser ...
// Naredite zahtevo, pridobite odgovor in počistite pomnilnik ...
}
Iz te kode lahko vidite, da sta edini razliki med zgornjim zahtevkom PUT in POST ime metode in URL. Ko uporabljate PUT za posodabljanje obstoječih podatkov, boste morali URL-ju zahteve dodati ID. Primer klica te funkcije bi bil videti takole:
func main() {
// posodobi vnos z ID-jem 2.
updateUser("Tim Newname", "Stambni pisec", "2")
}
Zgornja koda posodobi uporabnika in ustvari naslednji rezultat:
IZBRIŠI zahtevo
Za izvedbo operacije brisanja na spletnem strežniku uporabite metodo zahteve DELETE. Zahteva za brisanje izbriše vir, ki ga identificira URI. Zahteva DELETE v Go izgleda takole:
funkdeleteUser(id vrvica) {
fmt. Println("Brisanje uporabnika ...")
// naredi DELETE zahtevo API-ju za brisanje uporabnika
apiUrl := " https://reqres.in/api/users/" + id// ustvari novo http zahtevo
zahteva, napaka := http. NewRequest("IZBRIŠI", apiUrl, nič)
prošnja. Glava. Set ("Vrsta vsebine", "aplikacija/json; charset=utf-8")stranka := &http. odjemalec{}
odziv, napaka := stranka. Naredi (zahtevaj)
če napaka!= nič {
fmt. Println (napaka)
}
fmt. Println("Stanje: ", odgovor. Stanje)
}
Zahteva DELETE niti ne sprejme niti ne vrne telesa, zato ni potrebe po razčlenjevanju ali oblikovanju telesa zahteve in odgovora JSON. Odgovor vrne le status, ki nakazuje uspeh ali neuspeh. Tukaj je videti vzorec klica funkcije z njenim izhodom:
funkglavni() {
fmt. Println("Izdelava zahteve DELETE ...")
deleteUser("2")
}
Izhod:
Prihranite čas z uporabo http. objavi() in http. Get() metode iz net/http paket za izdelavo OBJAVI in DOBITI zahteva neposredno, ne da bi morali uporabiti NewRequest() funkcijo in odjemalec{} strukturo za ustvarjanje in izdelavo zahteve ločeno. Oglejte si net/http dokumentacijo za več informacij.
Izdelava zahtev HTTP v aplikacijah Go
The http paket v Go ponuja vse, kar je potrebno za izdelavo zahtev HTTP in obravnavanje odgovorov v aplikacijah Go. Funkcije in strukture, ki jih ponuja paket, vam omogočajo ustvarjanje in pošiljanje različnih vrst zahtev, kot so GET, POST, PUT, DELETE in številne druge.
To olajša izdelavo spletnih aplikacij v Go, ki lahko komunicirajo z drugimi spletnimi storitvami in API-ji. Dober način za pridobitev bolj seznanjen s pošiljanjem zahtev HTTP v Go je z izdelavo aplikacije, ki pošilja zahteve drugemu API-ju REST tvoje.