Graph Query Language (GraphQL) je jezik in specifikacija za interakcijo z API-ji GraphQL, arhitekturo odjemalec-strežnik, ki temelji na HTTP za komunikacijo po spletu.
Facebook je izdal GraphQL kot alternativo arhitekturnemu standardu REST. GraphQL večino težav z REST obravnava na način brez stanja in predpomnilnika. Zagotavlja preprosto in intuitivno sintakso, ki opisuje pričakovane rezultate ali vhode, API pa posreduje podatke, ki se ujemajo z zahtevo.
Ker je GraphQL specifikacija, lahko API-je GraphQL gradite in uporabljate v katerem koli strežniškem programskem jeziku, vključno z Go.
Kako začeti z API-ji GraphQL v Go
GraphQL temelji na arhitekturi HTTP, in Go zagotavlja funkcijo HTTP v svojem vgrajenem http paket.
Lahko uporabite http paket za uporabljajo API-je RESTful v Go, med drugimi funkcijami. Za GraphQL lahko izvajate poizvedbe in mutacije v strežnike API-jev GraphQL z http paket in drugi vgrajeni paketi.
Odjemalski paketi GraphQL, kot je Strojna škatla oz shurCooL's naredijo proces interakcije z API-ji GraphQL še lažji.
Lahko uporabite http paket brez kakršnih koli odvisnosti za interakcijo z API-jem GraphQL. Za začetek uvozite te pakete v datoteko Go:
uvoz (
"bajti"
"kodiranje/json"
"fmt"
"io/ioutil"
"net/http"
"čas"
)
Uporabili boste bajtov paket za ustvarjanje novega medpomnilnika za zahtevo in json paket za marširanje zemljevida v telo zahteve JSON. Lahko uporabiš ioutil za branje telesa odgovora in čas paket za nastavitev časovne omejitve za zahtevo.
Poizvedovanje API-jev GraphQL z Go
Obstaja veliko brezplačnih javnih API-jev GraphQL, po katerih lahko poizvedujete in jih integrirate v svoje aplikacije. Za ta članek boste poizvedovali po API-ju držav Apollo GraphQL za poizvedovanje podatkov o državah po vsem svetu.
Vse operacije GraphQL so običajno zahteve POST, saj morajo imeti obremenitev (telo zahteve). Večina API-jev GraphQL sprejema telo zahteve JSON kot vrsto vsebine in Go ponuja funkcionalnost za uporabo zemljevidov in struktur za delo z JSON.
Za poizvedbo API-ja boste morali preučiti strukturo sheme GraphQL. Poizvedba bo enaka običajni poizvedbi GraphQL, le da je operacija (poizvedba ali mutacija) ključ, podatki pa vrednost zemljevida.
Tukaj je opisano, kako lahko deklarirate primerek zemljevida JSON, ki ga boste marširali v JSON za zahtevo.
jsonMapInstance := zemljevid[vrvica]vrvica {
"povpraševanje": `
{
države {
ime,
telefon,
valuta,
Koda,
emoji
}
}
`,
}
The jsonMapInstance spremenljivka je primerek zemljevida za telo zahteve. Vrednost je niz podatkov poizvedbe, ki jih pričakujete od API-ja. V tem primeru podatke o poizvedbi, ki jih pričakujete od API-jev države shema so ime, telefon, valuta, Koda, in emoji polja.
Lahko uporabite maršal metoda json paket za kodiranje primerka zemljevida v JSON. The maršal metoda vrne kodiran JSON in napako za primere s težavo kodiranja.
jsonRezultat, napaka := json. Marshal (jsonMapInstance)
če napaka!= nič {
fmt. Printf("Pri marshalingu primerka JSON %v je prišlo do napake", napaka)
}
Ko kodirate zemljevid v JSON, lahko API-ju pošljete zahtevo POST. Nov primerek zahteve lahko ustvarite z NewRequest metoda, ki sprejme vrsto zahteve, URL in medpomnilnik JSON.
The NewRequest metoda vrne primerek zahteve. Nastaviti boste morali vrsto vsebine glede na specifikacije API-ja. Vrsto vsebine za zahteve HTTP lahko nastavite z Set metoda Glava način vašega primerka zahteve.
novaZahteva, napaka := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bajtov. NewBuffer (jsonResult))
newRequest. Glava. Set("Content-Type", "application/json")
Za svojo zahtevo lahko ustvarite preprostega odjemalca HTTP z Stranka metoda paketa HTTP. The Stranka omogoča tudi nastavitev časovne omejitve za vašo zahtevo z čas paket.
stranka := &http. Client{Timeout: čas. drugič * 5}
odgovor, napaka := stranka. Naredi (nova zahteva)
če napaka!= nič {
fmt. Printf("Pri izvajanju zahteve%v je prišlo do napake", err)
}
Ko navedete odjemalca HTTP, izvedite svojo zahtevo API z naredi metoda. The naredi metoda sprejme primerek zahteve ter vrne odgovor in napako.
Odgovor na zahtevo API lahko preberete z ioutil paketi ReadAll metoda. Sprejme izhodni tok in vrne bajtno rezino podatkov z napako, ki jo lahko obravnavate.
responseData, err := ioutil. ReadAll (odgovor. telo)
če napaka!= nič {
fmt. Printf("Napaka pri branju podatkov%v", err)
}
Z vgrajeno funkcijo niza lahko pretvorite odziv bajtne rezine v vrsto niza.
fmt. Println(vrvica(responseData))
Tukaj je odgovor, ki prikazuje rezultat zahteve API-ja:
Uporaba API-jev RESTful je kot uporaba API-jev GraphQL
Ker oba API-ja REST in GraphQL uporabljata protokol HTTP, je uporaba vsakega zelo podoben postopek in lahko uporabite http paket za oba primera.
Z istimi paketi boste morali ustvariti odjemalce, zahtevati primerke in prebrati podatke.