Graph Query Language (GraphQL) je jezik i specifikacija za interakciju s GraphQL API-jima, arhitekturom klijent-poslužitelj koja se temelji na HTTP-u za komunikaciju preko weba.
Facebook je objavio GraphQL kao alternativu REST arhitektonskom standardu. GraphQL rješava većinu problema s REST-om na način bez stanja i predmemoriranja. Pruža jednostavnu i intuitivnu sintaksu koja opisuje očekivani izlaz(e) ili ulaz(e), a API prenosi podatke koji odgovaraju zahtjevu.
Budući da je GraphQL specifikacija, možete izgraditi i koristiti GraphQL API-je u bilo kojem programskom jeziku na strani poslužitelja, uključujući Go.
Početak rada s GraphQL API-jima u Go
GraphQL se temelji na HTTP arhitekturi, a Go pruža HTTP funkcionalnost u svom ugrađenom http paket.
Možete koristiti http paket za koristiti RESTful API-je u Gou, između ostalih značajki. Za GraphQL možete postavljati upite i mijenjati GraphQL API poslužitelje s http paket i ostali ugrađeni paketi.
GraphQL klijentski paketi poput Strojne kutije ili shurCooL's učiniti proces interakcije s GraphQL API-jima još lakšim.
Možete koristiti http paket bez ikakvih ovisnosti za interakciju s GraphQL API-jem. Za početak uvezite ove pakete u svoju Go datoteku:
uvoz (
"bajtovi"
"kodiranje/json"
"fmt"
"io/ioutil"
"net/http"
"vrijeme"
)
Vi ćete koristiti bajtova paket za stvaranje novog međuspremnika za zahtjev i json paket za maršaliranje mape u JSON tijelo zahtjeva. Možeš koristiti ioutil za čitanje tijela odgovora i vrijeme paket za postavljanje vremenskog ograničenja za zahtjev.
Upitivanje GraphQL API-ja uz Go
Postoji mnogo besplatnih javnih GraphQL API-ja koje možete postavljati upite i integrirati u svoje aplikacije. Za ovaj ćete članak postaviti upit Apollo GraphQL-ovom Countries API-ju za upite podataka o zemljama diljem svijeta.
Sve GraphQL operacije obično su POST zahtjevi budući da moraju imati korisni teret (tijelo zahtjeva). Većina GraphQL API-ja prihvaća JSON tijelo zahtjeva kao vrstu sadržaja i Go pruža funkcionalnost za korištenje karata i struktura za rad s JSON-om.
Morat ćete proučiti strukturu GraphQL sheme da biste postavili upit API-ju. Upit će biti isti kao uobičajeni GraphQL upit osim što je operacija (upit ili mutacija) ključ, a podaci vrijednost karte.
Evo kako možete deklarirati instancu JSON karte koju ćete marširati u JSON za zahtjev.
jsonMapInstance := karta[niz]niz {
"upit": `
{
zemlje {
Ime,
telefon,
valuta,
kodirati,
emoji
}
}
`,
}
The jsonMapInstanca varijabla je instanca karte za tijelo zahtjeva. Vrijednost je niz podataka upita koje očekujete od API-ja. U ovom slučaju, podaci upita koje očekujete od API-ja zemljama shema su Ime, telefon, valuta, kodirati, i emoji polja.
Možete koristiti Maršal metoda json paket za kodiranje instance karte u JSON. The Maršal metoda vraća kodirani JSON i pogrešku za slučajeve s problemom kodiranja.
jsonRezultat, pogreška := json. Marshal (jsonMapInstance)
ako pogriješiti != nula {
fmt. Printf("Došlo je do pogreške prilikom marširanja JSON instance %v", err)
}
Nakon što kodirate kartu u JSON, možete poslati POST zahtjev API-ju. Možete stvoriti novu instancu zahtjeva s Novi zahtjev metoda, koja uzima vrstu zahtjeva, URL i JSON međuspremnik.
The Novi zahtjev metoda vraća instancu zahtjeva. Morat ćete postaviti vrstu sadržaja ovisno o specifikacijama API-ja. Možete postaviti vrstu sadržaja za HTTP zahtjeve pomoću set metoda Zaglavlje metoda vaše instance zahtjeva.
noviZahtjev, greška := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bajtova. NewBuffer (jsonResult))
noviZahtjev. Zaglavlje. Set("Content-Type", "application/json")
Možete stvoriti jednostavan HTTP klijent za svoj zahtjev s Klijent metoda HTTP paketa. The Klijent metoda vam također omogućuje postavljanje vremenskog ograničenja za vaš zahtjev s vrijeme paket.
klijent := &http. Klijent{Timeout: vrijeme. drugi * 5}
odgovor, greška := klijent. Učini (novi zahtjev)
ako pogriješiti != nula {
fmt. Printf("Došlo je do pogreške prilikom izvršavanja zahtjeva%v", err)
}
Nakon što ste deklarirali HTTP klijenta, izvršite svoj API zahtjev s Čini metoda. The Čini metoda prihvaća instancu zahtjeva i vraća odgovor i pogrešku.
Možete pročitati odgovor API zahtjeva s ioutil paketa ReadAll metoda. Uzima izlazni tok i vraća bajt odsječak podataka s pogreškom koju možete riješiti.
responseData, err := ioutil. ReadAll (odgovor. Tijelo)
ako pogriješiti != nula {
fmt. Printf("Pogreška čitanja podataka%v", err)
}
Uz ugrađenu funkciju niza, možete pretvoriti odgovor isječka bajta u vrstu niza.
fmt. Println(niz(podaci odgovora))
Evo odgovora koji prikazuje rezultat API zahtjeva:
Korištenje RESTful API-ja je kao korištenje GraphQL API-ja
Budući da i REST i GraphQL API-ji koriste HTTP protokol, korištenje oba je vrlo sličan proces, a možete koristiti http paket za oba slučaja.
Morat ćete kreirati klijente, zahtijevati instance i čitati podatke s istim paketima.