HTTP užklausos siuntimas yra labai svarbus bet kuriai programai, kuriai reikia bendrauti internetu. Sužinokite, kaip siųsti įvairias HTTP užklausas naudojant Go.
Vienas iš pagrindinių principų, reguliuojančių pasaulinio žiniatinklio veikimą, yra keitimasis užklausomis ir atsakymais. Kai siunčiate užklausą pasiekti tinklalapį, serveris atsako pateikdamas atitinkamus duomenis.
Populiarūs protokolai, reguliuojantys įvairius interneto ryšio tipus, apima HTTP (Hiperteksto perdavimo protokolas), FTP (Failų perdavimo protokolas) ir SMTP (Simple Mail Transfer Protocol).
HTTP yra protokolas, kurį paprastai naudosite peržiūrėdami svetainę arba naudodami žiniatinklio programą. Taip pat galite dirbti su HTTP užklausomis iš daugelio programavimo kalbų, įskaitant Go.
Kas yra HTTP užklausa?
HTTP apibrėžia, kaip klientai, pavyzdžiui, žiniatinklio naršyklės, siunčia užklausas serveriams, kurie tada pateikia atsakymą. HTTP užklausoje yra informacijos apie šaltinį, kurį bando pasiekti klientas. Užklausos pranešimą paprastai sudaro URL, identifikuojantis išteklius, ir kitus pasirenkamus duomenis, pvz., antraštes ir užklausos parametrus.
Yra kelių tipų HTTP užklausos, įskaitant Gauti, POST, PUT, DELETE, HEAD, OPTIONS ir CONNECT. Pirmieji keturi metodų tipai yra labiausiai paplitę; jie atspindi atitinkamai CRUD skaitymo, kūrimo, atnaujinimo ir ištrynimo operacijas.
PUT užklausos tipas dažnai naudojamas pakaitomis su PATCH užklausos tipu. Jie pasiekia tą patį tikslą, tik skiriasi duomenimis, kuriuos tikisi įtraukti į užklausą.
Užklausų siuntimas naudojant įprastus HTTP metodus
„Go“ įtaisytas http paketą suteikia funkcijų ir struktūrų rinkinį, kurį galite naudoti kurdami žiniatinklio serverius ir tvarkydami HTTP užklausas. Tai labai tvirtas paketas ir visos „Go“ žiniatinklio sistemos vienaip ar kitaip kuriamos ant jo. Tai yra „Go“ antrinis paketas neto paketą.
Norėdami sukurti HTTP užklausą programoje Go, galite naudoti http. NewRequest() funkciją ir nustatykite atitinkamą metodą, URL, antraštes ir užklausos turinį. Sukūrę užklausą, galite naudoti Go net/http paketas http. Klientas{} struktūrą, kad ją paleistumėte ir gautumėte atsakymą.
Naudojami šie kodo pavyzdžiai reqres.in, viešai prieinama API, skirta HTTP užklausoms tikrinti. Jį galite naudoti norėdami išbandyti GET, POST, PUT ir DELETE užklausas savo Go programose.
POST užklausa
Toliau pateiktas kodas yra funkcija, siunčianti POST užklausą į /api/users reqres.in pabaigos taškas, kad sukurtumėte naują vartotoją su vardu ir užduotimi.
paketą pagrindinis
importuoti (
"baitai"
"kodavimas/json"
"fmt"
"io"
"net/http"
)funcCreateUser(vardas, darbas styga) {
fmt. Println(„Kuriamas vartotojas...“)apiUrl := " https://reqres.in/api/users"
vartotojo duomenys := []baitas(`{"vardas":"` + vardas + `","darbas":"` + darbas + `"}`)// sukurti naują http užklausą
prašymas, klaida := http. NewRequest("POST", apiUrl, baitai. NewBuffer (naudotojo duomenys))
prašymas. Antraštė. Set("Turinio tipas", "programa/json; charset=utf-8")// išsiųsti užklausą
klientas := &http. Klientas{}
atsakymas, klaida := klientas. Daryti (prašyti)jeigu klaida! = nulis {
fmt. Println (klaida)
}atsakymasBody, klaida := io. Skaityti viską (atsakymas. Kūnas)
jeigu klaida! = nulis {
fmt. Println (klaida)
}formattedData := formatJSON(responseBody)
fmt. Println("Būsena:", atsakymas. Būsena)
fmt. Println(„Atsakymo kūnas:“, suformatuoti duomenys)
// išvalykite atmintį po vykdymo
atidėti atsakymą. Kūnas. Uždaryti()
}
formatasJSON yra pasirinktinė funkcija, kurią galite įrašyti norėdami formatuoti išvesties duomenis. Štai kaip galite tai įgyvendinti:
// funkcija JSON duomenims formatuoti
funcformatasJSON(duomenys []baitas)styga {
var išeina baitai. Buferis
klaida := json. Įtrauka(&out, duomenys, "", " ")jeigu klysta! = nulis {
fmt. Println (klaida)
}
d := išeina. Baitai ()
grąžintistygad)
}
Galite skambinti CreateUser() veikia tokioje programoje kaip ši:
funcpagrindinis() {
fmt. Println(„Pateikiama POST užklausa...“)
CreateUser("Timas Omolana", "Rašytojas")
}
Kai paleidžiate programą terminale, naudokite eik bėgti komandą, pamatysite tokią išvestį:
GAUTI Prašymą
Šis kodas yra funkcija, siunčianti GET užklausą, kad būtų galima nuskaityti vartotoją iš reqres.in serverio, naudojant jo unikalų ID.
// main.go
funcgetUser(id styga) {
fmt. Println(„Gauti naudotoją pagal ID...“)// Pateikite GET užklausą API, kad gautumėte vartotoją pagal ID
apiUrl := " https://reqres.in/api/users/" + id
prašymas, klaida := http. NewRequest("GAUTI", apiUrl, nulis)jeigu klaida! = nulis {
fmt. Println (klaida)
}prašymas. Antraštė. Set("Turinio tipas", "programa/json; charset=utf-8")
klientas := &http. Klientas{}
atsakymas, klaida := klientas. Daryti (prašyti)jeigu klaida! = nulis {
fmt. Println (klaida)
}atsakymasBody, klaida := io. Skaityti viską (atsakymas. Kūnas)
jeigu klaida! = nulis {
fmt. Println (klaida)
}formattedData := formatJSON(responseBody)
fmt. Println("Būsena:", atsakymas. Būsena)
fmt. Println(„Atsakymo kūnas:“, suformatuoti duomenys)
// išvalykite atmintį po vykdymo
atidėti atsakymą. Kūnas. Uždaryti()
}
GET užklausa nesiunčia duomenų į serverį, todėl ji nepriima arba nesiunčia serveriui užklausos turinio. Štai kaip atrodys anksčiau pateiktos funkcijos iškvietimo pavyzdys:
funcpagrindinis() {
fmt. Println(„Pateikiama GET užklausa...“)
getUser("2")
}
Išvestis:
PUT užklausa
PUT užklausa yra labai panaši į POST užklausą, nes ji taip pat siunčia duomenis į serverį. Pagrindinis skirtumas yra tas, kad POST sukuria naują šaltinį, o PUT atnaujina esamą.
Štai PUT užklausos įgyvendinimas:
// main.go
funcatnaujinti Vartotoją(vardas, darbas, id styga) {
fmt. Println("Atnaujinamas vartotojas...")// Pateikite PUT užklausą API, kad atnaujintumėte vartotoją
apiUrl := " https://reqres.in/api/users/" + id
vartotojo duomenys := []baitas(`{"vardas":"` + vardas + `","darbas":"` + darbas + `"}`)// sukurti naują http PUT užklausą
prašymas, klaida := http. NewRequest("PUT", apiUrl, baitai. NewBuffer (naudotojo duomenys))
prašymas. Antraštė. Set("Turinio tipas", "programa/json; charset=utf-8")
// Likęs funkcijos tekstas iš CreateUser funkcijos...
// Pateikite užklausą, gaukite atsakymą ir išvalykite atmintį...
}
Iš šio kodo galite matyti vienintelius skirtumus tarp aukščiau pateiktos PUT užklausos ir POST užklausos yra metodo pavadinimas ir URL. Kai naudojate PUT esamiems duomenims atnaujinti, turėsite pridėti ID prie užklausos URL. Šios funkcijos iškvietimo pavyzdys atrodytų taip:
func main() {
// atnaujinkite įrašą su ID 2.
updateUser("Timas Niuvardas", „Personalas rašytojas“, "2")
}
Aukščiau pateiktas kodas atnaujina vartotoją ir sukuria tokią išvestį:
IŠTRINTI užklausą
Naudokite DELETE užklausos metodą, kad atliktumėte ištrynimo operaciją žiniatinklio serveryje. Ištrynimo užklausa ištrina URI nurodytą šaltinį. Ištrinti užklausą „Go“ atrodo taip:
funcištrinti vartotoją(id styga) {
fmt. Println(„Trinamas vartotojas...“)
// Pateikite DELETE užklausą API, kad pašalintumėte vartotoją
apiUrl := " https://reqres.in/api/users/" + id// sukurti naują http užklausą
prašymas, klaida := http. NewRequest("IŠTRINTI", apiUrl, nulis)
prašymas. Antraštė. Set("Turinio tipas", "programa/json; charset=utf-8")klientas := &http. Klientas{}
atsakymas, klaida := klientas. Daryti (prašyti)
jeigu klaida! = nulis {
fmt. Println (klaida)
}
fmt. Println("Būsena:", atsakymas. Būsena)
}
DELETE užklausa nei priima, nei grąžina tekstą, todėl nereikia analizuoti ar formatuoti JSON užklausos ir atsakymo turinio. Atsakymas grąžina tik būseną, rodančią sėkmę ar nesėkmę. Štai kaip atrodo pavyzdinis funkcijos iškvietimas su jos išvestimi:
funcpagrindinis() {
fmt. Println(„Pateikiamas prašymas IŠTRINTI...“)
deleteUser("2")
}
Išvestis:
Sutaupykite laiko naudodami http. Įrašas () ir http. Gauti () metodai iš net/http pagaminti paketą PAST ir GAUTI užklausas tiesiogiai, nenaudojant NewRequest() funkcija ir Klientas{} struktūra sukurti ir pateikti užklausą atskirai. Patikrinkite net/http dokumentacija Daugiau informacijos.
HTTP užklausų teikimas „Go“ programose
The http „Go“ paketas suteikia viską, ko reikia norint pateikti HTTP užklausas ir tvarkyti atsakymus „Go“ programose. Paketo teikiamos funkcijos ir struktūros leidžia kurti ir siųsti įvairių rūšių užklausas, tokias kaip GET, POST, PUT, DELETE ir daug daugiau.
Tai leidžia lengvai kurti žiniatinklio programas naudojant „Go“, kurios gali sąveikauti su kitomis žiniatinklio paslaugomis ir API. Geras būdas gauti daugiau susipažinę su HTTP užklausų teikimu „Go“ yra sukurti programą, kuri teikia užklausas kitai REST API tavo.