Ako používať koncové body GraphQL API v Go

Ako používať koncové body GraphQL API v Go

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.





ako nájsť diskovú jednotku v systéme Windows 10

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 (výstupy) alebo vstup (vstupy) a API prenáša údaje zodpovedajúce požiadavke.





VYUŽITIE VIDEA DŇA

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 HTTP a 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.



  prehľadová časť balíka Go HTTP

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:





import ( 
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)

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 := map[string]string { 
"query": `
{
countries {
name,
phone,
currency,
code,
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, err := json.Marshal(jsonMapInstance) 

if err != nil {
fmt.Printf("There was an error marshaling the JSON instance %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.

newRequest, err := http.NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes.NewBuffer(jsonResult)) 
newRequest.Header.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.

 
client := &http.Client{Timeout: time.Second * 5}
response, err := client.Do(newRequest)

if err != nil {
fmt.Printf("There was an error executing the request%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(response.Body) 

if err != nil {
fmt.Printf("Data Read Error%v", err)
}

Pomocou vstavanej funkcie reťazca môžete previesť odpoveď bajtového rezu na typ reťazca.

fmt.Println(string(responseData)) 

Tu je odpoveď zobrazujúca výsledok požiadavky API:

  Výstup z dotazu GraphQL API zobrazuje zoznam krajín a ich požadované polia.

Spotreba RESTful API je ako konzumácia GraphQL API

Keďže REST aj GraphQL API používajú protokol HTTP, spotrebovanie 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.