Graph Query Language (GraphQL) on keel ja spetsifikatsioon suhtlemiseks GraphQL API-dega, HTTP-põhise klient-serveri arhitektuuriga suhtlemiseks kogu veebis.

Facebook andis välja GraphQL-i alternatiivina REST-i arhitektuuristandardile. GraphQL lahendab enamiku REST-i probleemidest olekuta ja vahemällu salvestaval viisil. See pakub lihtsat ja intuitiivset süntaksit, mis kirjeldab eeldatavat väljundit või sisendit, ning API edastab päringule vastavad andmed.

Kuna GraphQL on spetsifikatsioon, saate GraphQL API-sid luua ja tarbida mis tahes serveripoolses programmeerimiskeeles, sealhulgas Go.

GraphQL API-de kasutamise alustamine Go-s

GraphQL põhineb HTTP arhitektuurilja Go pakub sisseehitatud HTTP-funktsioone http pakett.

Võite kasutada http pakkida tarbida GOS RESTful API-sid, muude funktsioonide hulgas. GraphQL-i puhul saate teha päringuid ja mutatsioone GraphQL API-de serveritesse, kasutades http pakett ja muud sisseehitatud paketid.

GraphQL kliendipaketid nagu Masinakastid või shurCool's muudab GraphQL API-dega suhtlemise veelgi lihtsamaks.

Võite kasutada http pakett ilma sõltuvusteta GraphQL API-ga suhtlemiseks. Alustamiseks importige need paketid oma Go-faili:

importida (
"baidid"
"kodeering/json"
"fmt"
"io/ioutil"
"net/http"
"aeg"
)

Sa kasutad baiti pakett, et luua uus puhver päringu ja json pakett, et suunata kaart JSON-i päringu kehasse. Sa võid kasutada ioutil vastuse keha lugemiseks ja aega pakett, et määrata päringule tähtaeg.

Päringu esitamine GraphQL API-de kohta Go'ga

Seal on palju tasuta avalikke GraphQL-i API-sid, kust saate päringuid teha ja oma rakendustesse integreerida. Selle artikli jaoks esitate päringu Apollo GraphQL-i riikide API-le, et teha päringuid kogu maailma riikide kohta.

Kõik GraphQL-i toimingud on tavaliselt POST-päringud, kuna neil peab olema kasulik koormus (päringu keha). Enamik GraphQL API-sid aktsepteerib sisutüübina JSON-i päringu keha ja Go pakub funktsioone kaartide ja struktuuride kasutamiseks JSON-iga töötamiseks.

API päringu tegemiseks peate uurima GraphQL-i skeemi struktuuri. Päring on sama, mis tavaline GraphQL-i päring, välja arvatud see, et toiming (päring või mutatsioon) on võti ja andmed on kaardi väärtus.

Siit saate teada, kuidas saate deklareerida JSON-i kaardieksemplari, mille lisate päringu jaoks JSON-i.

jsonMapInstance := kaart[string]string {
"päring": `
{
riigid {
nimi,
telefon,
valuuta,
kood,
emotikonid
}
}
`,
}

The jsonMapInstance muutuja on päringu keha kaardieksemplar. Väärtus on päringuandmete string, mida API-lt ootate. Sel juhul päringuandmed, mida API-delt ootate riigid skeemid on nimi, telefon, valuuta, koodja emotikonid väljad.

Võite kasutada marssal meetod json pakett kaardieksemplari JSON-i kodeerimiseks. The marssal meetod tagastab kodeeritud JSON-i ja veateate kodeerimisprobleemiga juhtudel.

jsonResult, err := json. marssal (jsonMapInstance)

kui eks!= null {
fmt. Printf ("JSON-i eksemplari %v korraldamisel tekkis viga", viga)
}

Kui olete kaardi JSON-i kodeerinud, saate API-le saata POST-päringu. Saate luua uue päringu eksemplari rakendusega Uus taotlus meetod, mis võtab päringu tüübi, URL-i ja JSON-puhvri.

The Uus taotlus meetod tagastab päringu eksemplari. Peate määrama sisu tüübi olenevalt API spetsifikatsioonidest. HTTP-päringute sisutüübi saate määrata nupuga Määra meetod Päis teie päringu eksemplari meetod.

newRequest, err := http. NewRequest("POSTITA", "https://countries.trevorblades.com/graphql", baiti. NewBuffer (jsonResult))
uus taotlus. Päis. Set("Sisu tüüp", "rakendus/json")

Saate luua oma päringu jaoks lihtsa HTTP-kliendi rakendusega Klient HTTP-paketi meetod. The Klient meetod võimaldab teil määrata ka oma päringule tähtaja aega pakett.


klient := &http. Klient{Timeout: aeg. Teine* 5}
vastus, err := klient. Tee (uus taotlus)

kui eks!= null {
fmt. Printf ("Päringu%v täitmisel tekkis viga", viga)
}

Kui olete HTTP-kliendi deklareerinud, täitke oma API taotlus rakendusega Tee meetod. The Tee meetod aktsepteerib päringu eksemplari ja tagastab vastuse ja vea.

API päringu vastust saate lugeda rakendusega ioutil pakendid Loe kõik meetod. See võtab vastu väljundvoo ja tagastab baidise andmelõigu veaga, mida saate käsitleda.

vastuseandmed, err := ioutil. Loe kõike (vastus. keha)

kui eks!= null {
fmt. Printf ("Andmete lugemise viga%v", viga)
}

Sisseehitatud stringifunktsiooniga saate teisendada baidilõigu vastuse stringitüübiks.

fmt. Println(string(responseData))

Siin on vastus, mis näitab API päringu tulemust:

RESTful API-de tarbimine on nagu GraphQL API-de tarbimine

Kuna nii REST kui ka GraphQL API-d kasutavad HTTP-protokolli, on mõlema tarbimine väga sarnane protsess ja saate kasutada http pakett mõlemal juhul.

Peate looma kliente, taotlema eksemplare ja lugema andmeid samade pakettidega.