Graph Query Language (GraphQL) to język i specyfikacja do interakcji z interfejsami API GraphQL, opartą na protokole HTTP architekturą klient-serwer do komunikacji w sieci.

Facebook wypuścił GraphQL jako alternatywę dla standardu architektonicznego REST. GraphQL rozwiązuje większość problemów z REST w sposób bezstanowy i buforowany. Zapewnia prostą i intuicyjną składnię, która opisuje oczekiwane dane wyjściowe lub wejściowe, a interfejs API przekazuje dane pasujące do żądania.

Ponieważ GraphQL jest specyfikacją, możesz tworzyć i wykorzystywać interfejsy API GraphQL w dowolnym języku programowania po stronie serwera, w tym Go.

Pierwsze kroki z interfejsami API GraphQL w Go

GraphQL jest oparty na architekturze HTTP, a Go zapewnia funkcjonalność HTTP w swojej wbudowanej wersji http pakiet.

Możesz użyć http paczka do korzystaj z interfejsów API RESTful w Go, między innymi funkcje. W przypadku GraphQL możesz tworzyć zapytania i mutacje na serwerach GraphQL API za pomocą http package i inne wbudowane pakiety.

Pakiety klienta GraphQL, takie jak Skrzynki maszynowe Lub shurCooL's jeszcze bardziej ułatwić proces interakcji z interfejsami API GraphQL.

Możesz użyć http pakiet bez żadnych zależności do interakcji z interfejsem API GraphQL. Aby rozpocząć, zaimportuj te pakiety do pliku Go:

import (
„bajty”
„kodowanie/json”
"fmt"
"io/joutil"
„sieć/http”
"czas"
)

Użyjesz bajty package, aby utworzyć nowy bufor dla żądania i json package w celu przygotowania mapy do treści żądania JSON. Możesz użyć iutil przeczytać treść odpowiedzi i czas package, aby ustawić limit czasu dla żądania.

Wyszukiwanie API GraphQL za pomocą Go

Istnieje wiele bezpłatnych publicznych interfejsów API GraphQL, które można wyszukiwać i integrować ze swoimi aplikacjami. W tym artykule prześlesz zapytanie do API krajów Apollo GraphQL, aby przeszukiwać dane dotyczące krajów na całym świecie.

Wszystkie operacje GraphQL są zazwyczaj żądaniami POST, ponieważ muszą mieć ładunek (treść żądania). Większość interfejsów API GraphQL akceptuje treść żądania JSON jako typ zawartości i Go zapewnia funkcjonalność do używania map i struktur do pracy z JSON.

Będziesz musiał przestudiować strukturę schematu GraphQL, aby wysłać zapytanie do API. Zapytanie będzie takie samo jak zwykłe zapytanie GraphQL, z wyjątkiem tego, że operacja (zapytanie lub mutacja) jest kluczem, a dane są wartością mapy.

Oto jak możesz zadeklarować instancję mapy JSON, którą przekształcisz w JSON dla żądania.

jsonMapInstancja := mapa[strunowy]strunowy {
"zapytanie": `
{
Państwa {
nazwa,
telefon,
waluta,
kod,
emotikony
}
}
`,
}

The jsonMapInstancja zmienna jest instancją mapy dla treści żądania. Wartość to ciąg danych zapytania, których oczekujesz od interfejsu API. W tym przypadku dane zapytania, których oczekujesz od interfejsów API Państwa schematy są nazwa, telefon, waluta, kod, I emotikony pola.

Możesz użyć Marszałek metoda tzw json package, aby zakodować instancję mapy do formatu JSON. The Marszałek Metoda zwraca zakodowany JSON i błąd w przypadkach z problemem z kodowaniem.

jsonWynik, błąd:= json. Marszałek (jsonMapInstance)

Jeśli błąd!= zero {
fmt. Printf("Wystąpił błąd podczas organizowania instancji JSON %v", err)
}

Po zakodowaniu mapy do JSON możesz wysłać żądanie POST do API. Możesz utworzyć nową instancję żądania za pomocą NoweŻądanie metoda, która przyjmuje typ żądania, adres URL i bufor JSON.

The NoweŻądanie Metoda zwraca instancję żądania. Musisz ustawić typ zawartości w zależności od specyfikacji interfejsu API. Możesz ustawić typ zawartości dla żądań HTTP za pomocą Ustawić metoda tzw nagłówek metoda Twojej instancji żądania.

newRequest, błąd:= http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bajtów. NewBuffer (jsonResult))
nowyŻądanie. Nagłówek. Set("Typ zawartości", "aplikacja/json")

Możesz utworzyć prostego klienta HTTP dla swojego żądania za pomocą Klient metoda pakietu HTTP. The Klient Metoda pozwala również ustawić limit czasu dla żądania za pomocą czas pakiet.


klient := &http. Klient {Limit czasu: czas. Drugi * 5}
odpowiedź, błąd: = klient. Wykonaj (noweŻądanie)

Jeśli błąd!= zero {
fmt. Printf("Wystąpił błąd podczas wykonywania żądania%v", err)
}

Po zadeklarowaniu klienta HTTP wykonaj żądanie API za pomocą Do metoda. The Do metoda akceptuje instancję żądania i zwraca odpowiedź oraz błąd.

Możesz przeczytać odpowiedź na żądanie API za pomocą iutil paczka Czytaj wszystko metoda. Pobiera strumień wyjściowy i zwraca bajtowy wycinek danych z błędem, który możesz obsłużyć.

responseData, err:= ioutil. Czytaj wszystko (odpowiedź. Ciało)

Jeśli błąd!= zero {
fmt. Printf("Błąd odczytu danych%v", błąd)
}

Dzięki wbudowanej funkcji łańcuchowej możesz przekonwertować odpowiedź wycinka bajtów na typ łańcuchowy.

fmt. println(strunowy(dane odpowiedzi))

Oto odpowiedź przedstawiająca wynik żądania API:

Korzystanie z interfejsów API RESTful jest jak korzystanie z interfejsów API GraphQL

Ponieważ zarówno interfejsy API REST, jak i GraphQL używają protokołu HTTP, konsumpcja każdego z nich jest bardzo podobnym procesem i można użyć http Pakiet dla obu przypadków.

Będziesz musiał utworzyć klientów, zażądać instancji i odczytać dane z tymi samymi pakietami.