Graph Query Language (GraphQL) este un limbaj și o specificație pentru interacțiunea cu API-urile GraphQL, o arhitectură client-server bazată pe HTTP pentru comunicarea pe web.

Facebook a lansat GraphQL ca alternativă la standardul arhitectural REST. GraphQL abordează majoritatea problemelor legate de REST într-o manieră fără stat și care poate fi stocată în cache. Oferă o sintaxă simplă și intuitivă care descrie ieșirile sau intrările așteptate, iar API-ul transmite datele care se potrivesc cu cererea.

Deoarece GraphQL este o specificație, puteți construi și consuma API-uri GraphQL în orice limbaj de programare pe partea de server, inclusiv Go.

Noțiuni introductive cu API-urile GraphQL în Go

GraphQL se bazează pe arhitectura HTTP, și Go oferă funcționalitate HTTP în sistemul său încorporat http pachet.

Puteți folosi http pachet la consumați API-uri RESTful în Go, printre alte caracteristici. Pentru GraphQL, puteți face interogări și mutații la serverele API-urilor GraphQL cu ajutorul http pachet și alte pachete încorporate.

instagram viewer

Pachetele client GraphQL cum ar fi Machinebox-uri sau shurCooL’s face procesul de interacțiune cu API-urile GraphQL și mai ușor.

Puteți folosi http pachet fără nicio dependență pentru a interacționa cu un API GraphQL. Importați aceste pachete în fișierul Go pentru a începe:

import (
„octeți”
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"timp"
)

Veți folosi octeți pachet pentru a crea un nou buffer pentru cerere și json pachet pentru a trimite o hartă către corpul solicitării JSON. Poți să folosești ioutil pentru a citi corpul răspunsului și timp pachet pentru a stabili un termen limită pentru cerere.

Interogarea API-urilor GraphQL cu Go

Există multe API-uri GraphQL publice gratuite pe care le puteți interoga și integra în aplicațiile dvs. Pentru acest articol, veți interoga API-ul Țărilor Apollo GraphQL pentru a interoga date despre țări din întreaga lume.

Toate operațiunile GraphQL sunt de obicei solicitări POST, deoarece trebuie să aibă o sarcină utilă (corpul cererii). Majoritatea API-urilor GraphQL acceptă corpul solicitării JSON ca tip de conținut și Go oferă funcționalitate pentru utilizarea hărților și structurilor pentru a lucra cu JSON.

Va trebui să studiați structura schemei GraphQL pentru a interoga API-ul. Interogarea va fi aceeași cu o interogare GraphQL obișnuită, cu excepția faptului că operația (interogare sau mutație) este cheia, iar datele sunt valoarea hărții.

Iată cum puteți declara o instanță de hărți JSON pe care o veți trimite în JSON pentru cerere.

jsonMapInstance := Hartă[şir]şir {
"interogare": `
{
țări {
Nume,
telefon,
valută,
cod,
emoji
}
}
`,
}

The jsonMapInstance variabila este instanța hărții pentru corpul cererii. Valoarea este un șir de date de interogare pe care le așteptați de la API. În acest caz, datele de interogare pe care le veți aștepta de la API-uri ţări schema sunt cele Nume, telefon, valută, cod, și emoji câmpuri.

Puteți folosi Mareșal metoda de json pachet pentru a codifica instanța hărții în JSON. The Mareșal metoda returnează JSON codificat și o eroare pentru cazurile cu o problemă de codificare.

jsonResult, err := json. Marshal (jsonMapInstance)

dacă greș!= zero {
fmt. Printf(„A apărut o eroare la stabilirea instanței JSON %v”, err)
}

După ce ați codificat harta în JSON, puteți trimite solicitarea POST către API. Puteți crea o nouă instanță de solicitare cu Cerere nouă metoda, care include tipul cererii, adresa URL și memoria tampon JSON.

The Cerere nouă metoda returnează o instanță de solicitare. Va trebui să setați tipul de conținut în funcție de specificațiile API-ului. Puteți seta tipul de conținut pentru solicitările HTTP cu ajutorul A stabilit metoda de Antet metoda cererii dumneavoastră.

newRequest, err := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", octeți. NewBuffer (jsonResult))
cerere nouă. Antet. Set(„Content-Type”, „application/json”)

Puteți crea un client HTTP simplu pentru solicitarea dvs. cu Client metoda pachetului HTTP. The Client metoda vă permite, de asemenea, să setați o limită de timp pentru cererea dvs. cu timp pachet.


client := &http. Client{Timeout: time. Al doilea * 5}
răspuns, eroare := client. Faceți (cerere nouă)

dacă greș!= zero {
fmt. Printf(„A apărut o eroare la executarea cererii%v”, err)
}

După ce ați declarat clientul HTTP, executați solicitarea API cu Do metodă. The Do metoda acceptă instanța cererii și returnează răspunsul și o eroare.

Puteți citi răspunsul la cererea API cu ioutil pachetelor Citeste tot metodă. Preia un flux de ieșire și returnează o porțiune de octeți a datelor cu o eroare pe care o puteți gestiona.

responseData, err := ioutil. Readall (răspuns. Corp)

dacă greș!= zero {
fmt. Printf(„Eroare de citire a datelor%v”, err)
}

Cu funcția de șir încorporată, puteți converti răspunsul la felul de octeți la tipul de șir.

fmt. Println(şir(responseData))

Iată un răspuns care arată rezultatul solicitării API:

Consumul de API-uri RESTful este ca și cum consumați API-uri GraphQL

Deoarece ambele API-uri REST și GraphQL folosesc protocolul HTTP, consumarea fiecăruia este un proces foarte similar și puteți utiliza http pachet pentru ambele cazuri.

Va trebui să creați clienți, să solicitați instanțe și să citiți datele cu aceleași pachete.