Graph Query Language (GraphQL) je jazyk a špecifikácia pre interakciu s GraphQL API, architektúrou klient-server založenou na HTTP pre komunikáciu cez web.
Facebook vydal GraphQL ako alternatívu k architektonickému štandardu REST. GraphQL rieši väčšinu problémov s REST bezstavovým a cacheovateľným spôsobom. Poskytuje jednoduchú a intuitívnu syntax, ktorá popisuje očakávaný výstup (y) alebo vstup (y) a API prenáša údaje zodpovedajúce požiadavke.
Keďže GraphQL je špecifikácia, môžete vytvárať a používať rozhrania GraphQL API v akomkoľvek programovacom jazyku na strane servera vrátane Go.
Začíname s GraphQL API v Go
GraphQL je založený na architektúre HTTPa Go poskytuje vo svojej vstavanej funkcii HTTP http balík.
Môžete použiť http zabaliť do používať RESTful API v Go, okrem iných funkcií. Pre GraphQL môžete vytvárať dotazy a mutácie na serveroch API GraphQL pomocou http balík a ďalšie vstavané balíky.
Klientske balíky GraphQL ako Machinebox's alebo shurCooL's ešte viac zjednodušiť proces interakcie s GraphQL API.
Môžete použiť http balík bez akýchkoľvek závislostí na interakciu s GraphQL API. Začnite importovaním týchto balíkov do súboru Go:
importovať (
"bajty"
"kódovanie/json"
"fmt"
"io/ioutil"
"net/http"
"čas"
)
Budete používať bajtov balík na vytvorenie novej vyrovnávacej pamäte pre požiadavku a json balík na začlenenie mapy do tela požiadavky JSON. Môžeš použiť ioutil na prečítanie tela odpovede a čas balík na nastavenie časového limitu žiadosti.
Dotazovanie na GraphQL API s Go
Existuje mnoho bezplatných verejných rozhraní API GraphQL, ktoré môžete vyhľadávať a integrovať do svojich aplikácií. V tomto článku budete dopytovať rozhranie API pre krajiny Apollo GraphQL, aby ste mohli vyhľadávať údaje o krajinách na celom svete.
Všetky operácie GraphQL sú zvyčajne požiadavky POST, pretože musia mať užitočné zaťaženie (telo požiadavky). Väčšina rozhraní GraphQL API akceptuje telo požiadavky JSON ako typ obsahu a Go poskytuje funkcie na používanie máp a štruktúr na prácu s JSON.
Budete si musieť preštudovať štruktúru schémy GraphQL, aby ste sa mohli pýtať na API. Dopyt bude rovnaký ako bežný dotaz GraphQL okrem toho, že operácia (dotaz alebo mutácia) je kľúčom a údaje sú hodnotou mapy.
Tu je návod, ako môžete deklarovať inštanciu mapy JSON, ktorú pre danú požiadavku zaradíte do JSON.
jsonMapInstance := mapa[reťazec]reťazec {
"dopyt": `
{
krajiny {
názov,
telefón,
mena,
kód,
emoji
}
}
`,
}
The jsonMapInstance premenná je inštancia mapy pre telo požiadavky. Hodnota je reťazec údajov dopytu, ktoré očakávate od rozhrania API. V tomto prípade údaje dopytu, ktoré očakávate od rozhraní API krajín schémy sú názov, telefón, mena, kód, a emoji poliach.
Môžete použiť maršal metóda json balík na zakódovanie inštancie mapy do JSON. The maršal metóda vráti zakódovaný JSON a chybu v prípadoch s problémom s kódovaním.
jsonResult, chyba := json. Marshal (jsonMapInstance)
ak chyba!= nula {
fmt. Printf("Vyskytla sa chyba pri zaraďovaní inštancie JSON %v", err)
}
Po zakódovaní mapy do JSON môžete odoslať požiadavku POST do rozhrania API. Môžete vytvoriť novú inštanciu požiadavky pomocou NewRequest metóda, ktorá preberá typ požiadavky, adresu URL a vyrovnávaciu pamäť JSON.
The NewRequest metóda vráti inštanciu požiadavky. Budete musieť nastaviť typ obsahu v závislosti od špecifikácií API. Typ obsahu pre požiadavky HTTP môžete nastaviť pomocou Set metóda Hlavička spôsob inštancie vašej požiadavky.
nová požiadavka, chyba := http. NewRequest("POST", "https://country.trevorblades.com/graphql", bajtov. NewBuffer (jsonResult))
newRequest. Hlavička. Set("Content-Type", "application/json")
Môžete vytvoriť jednoduchého HTTP klienta pre vašu požiadavku pomocou Zákazník metóda balíka HTTP. The Zákazník metóda vám tiež umožňuje nastaviť časový limit pre vašu žiadosť s čas balík.
klient := &http. Klient{Časový limit: čas. druhý * 5}
odpoveď, chyba := klient. Urobiť (nová požiadavka)
ak chyba!= nula {
fmt. Printf("Vyskytla sa chyba pri vykonávaní požiadavky%v", err)
}
Po deklarovaní klienta HTTP vykonajte požiadavku rozhrania API pomocou Do metóda. The Do metóda prijme inštanciu požiadavky a vráti odpoveď a chybu.
Odpoveď na požiadavku API si môžete prečítať pomocou ioutil balíka ReadAll metóda. Vezme výstupný tok a vráti bajtovú časť údajov s chybou, ktorú dokážete zvládnuť.
responseData, err := ioutil. ReadAll (odpoveď. telo)
ak chyba!= nula {
fmt. Printf("Chyba čítania údajov%v", chyba)
}
Pomocou vstavanej funkcie reťazca môžete previesť odpoveď bajtového rezu na typ reťazca.
fmt. Println(reťazec(responseData))
Tu je odpoveď zobrazujúca výsledok požiadavky API:
Spotreba RESTful API je ako konzumácia GraphQL API
Keďže REST aj GraphQL API používajú protokol HTTP, používanie každého z nich je veľmi podobný proces a môžete použiť http balík pre oba prípady.
Budete musieť vytvárať klientov, požadovať inštancie a čítať údaje s rovnakými balíkmi.