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.

instagram viewer

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.