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.
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:
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.