Graph Query Language (GraphQL) est un langage et une spécification permettant d'interagir avec les API GraphQL, une architecture client-serveur basée sur HTTP pour la communication sur le Web.
Facebook a publié GraphQL comme alternative à la norme architecturale REST. GraphQL résout la plupart des problèmes avec REST d'une manière sans état et pouvant être mise en cache. Il fournit une syntaxe simple et intuitive qui décrit la ou les sortie(s) ou entrée(s) attendue(s), et l'API relaie les données correspondant à la requête.
Étant donné que GraphQL est une spécification, vous pouvez créer et consommer des API GraphQL dans n'importe quel langage de programmation côté serveur, y compris Go.
Premiers pas avec les API GraphQL dans Go
GraphQL est basé sur l'architecture HTTP, et Go fournit la fonctionnalité HTTP dans sa version intégrée http emballer.
Vous pouvez utiliser le http colis à consommer des API RESTful dans Go, entre autres fonctionnalités. Pour GraphQL, vous pouvez effectuer des requêtes et des mutations sur les serveurs d'API GraphQL avec le
http package et d'autres packages intégrés.Les packages client GraphQL tels que Machinebox ou shurCooL's rendre le processus d'interaction avec les API GraphQL encore plus facile.
Vous pouvez utiliser le http package sans aucune dépendance pour interagir avec une API GraphQL. Importez ces packages dans votre fichier Go pour commencer :
importer (
"octets"
"encodage/json"
"fmt"
"io/ioutil"
"net/http"
"temps"
)
Vous utiliserez le octets package pour créer un nouveau tampon pour la requête et le json package pour marshaler une carte vers le corps de la requête JSON. Vous pouvez utiliser ioutil pour lire le corps de la réponse, et le temps package pour fixer un délai pour la demande.
Interroger les API GraphQL avec Go
Il existe de nombreuses API GraphQL publiques gratuites que vous pouvez interroger et intégrer dans vos applications. Pour cet article, vous allez interroger l'API Pays d'Apollo GraphQL pour interroger des données sur les pays du monde entier.
Toutes les opérations GraphQL sont généralement des requêtes POST car elles doivent avoir une charge utile (corps de la requête). La plupart des API GraphQL acceptent le corps de la requête JSON comme type de contenu, et Go fournit des fonctionnalités pour utiliser des cartes et des structures pour travailler avec JSON.
Vous devrez étudier la structure du schéma GraphQL pour interroger l'API. La requête sera la même qu'une requête GraphQL normale, sauf que l'opération (requête ou mutation) est la clé et que les données sont la valeur de la carte.
Voici comment vous pouvez déclarer une instance de carte JSON que vous marshalerez en JSON pour la requête.
jsonMapInstance := carte[chaîne]chaîne {
"mettre en doute": `
{
des pays {
nom,
téléphone,
monnaie,
code,
émoji
}
}
`,
}
Le jsonMapInstance variable est l'instance de carte pour le corps de la requête. La valeur est une chaîne des données de requête que vous attendez de l'API. Dans ce cas, les données de requête que vous attendez des API des pays schéma sont les nom, téléphone, monnaie, code, et émoji des champs.
Vous pouvez utiliser le Maréchal méthode de la json package pour encoder l'instance de carte en JSON. Le Maréchal La méthode renvoie le JSON encodé et une erreur pour les cas avec un problème d'encodage.
jsonResult, erreur := json. Maréchal (jsonMapInstance)
si erreur != néant {
fmt. Printf("Une erreur s'est produite lors du marshaling de l'instance JSON %v", err)
}
Une fois que vous avez encodé la carte en JSON, vous pouvez envoyer la requête POST à l'API. Vous pouvez créer une nouvelle instance de demande avec le Nouvelle requête méthode, qui prend en compte le type de requête, l'URL et le tampon JSON.
Le Nouvelle requête La méthode renvoie une instance de requête. Vous devrez définir le type de contenu en fonction des spécifications de l'API. Vous pouvez définir le type de contenu pour les requêtes HTTP avec le Ensemble méthode de la Entête méthode de votre instance de requête.
nouvelleRequête, erreur := http. NouvelleRequête("POST", "https ://countries.trevorblades.com/graphql", octets. NouveauBuffer (jsonResult))
nouvelle requête. Entête. Set("Content-Type", "application/json")
Vous pouvez créer un simple client HTTP pour votre requête avec le Client méthode du package HTTP. Le Client permet également de fixer un délai pour votre demande avec le temps emballer.
client := & http. Client{Timeout: temps. Deuxième * 5}
réponse, erreur := client. Faire (nouvelleDemande)
si erreur != néant {
fmt. Printf("Une erreur s'est produite lors de l'exécution de la requête%v", err)
}
Après avoir déclaré le client HTTP, exécutez votre requête API avec le Faire méthode. Le Faire La méthode accepte l'instance de requête et renvoie la réponse et une erreur.
Vous pouvez lire la réponse de la requête API avec le ioutil paquets Lis tout méthode. Il prend un flux de sortie et renvoie une tranche d'octet des données avec une erreur que vous pouvez gérer.
responseData, err := ioutil. Lire tout (réponse. Corps)
si erreur != néant {
fmt. Printf("Erreur de lecture de données%v", err)
}
Avec la fonction de chaîne intégrée, vous pouvez convertir la réponse de la tranche d'octets en type de chaîne.
fmt. Imprimerln(chaîne(réponseDonnées))
Voici une réponse montrant le résultat de la requête API :
Consommer des API RESTful, c'est comme consommer des API GraphQL
Étant donné que les API REST et GraphQL utilisent le protocole HTTP, la consommation de chacune est un processus très similaire et vous pouvez utiliser le http forfait pour les deux cas.
Vous devrez créer des clients, demander des instances et lire les données avec les mêmes packages.