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.

instagram viewer

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.