View a markdown version of this page

Schémas GraphQL - AWS AppSync GraphQL

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Schémas GraphQL

Le schéma GraphQL constitue la base d'une API GraphQL. Il sert de modèle qui définit la forme de vos données. Il s'agit également d'un contrat entre votre client et votre serveur qui définit la manière dont vos données seront récupérées et and/or modifiées.

Les schémas GraphQL sont écrits dans le langage SDL (Schema Definition Language). SDL est composé de types et de champs dotés d'une structure établie :

  • Types  : les types permettent à GraphQL de définir la forme et le comportement des données. GraphQL prend en charge une multitude de types qui seront expliqués plus loin dans cette section. Chaque type défini dans votre schéma contiendra sa propre étendue. À l'intérieur de la portée se trouveront un ou plusieurs champs pouvant contenir une valeur ou une logique qui sera utilisée dans votre service GraphQL. Les types remplissent de nombreux rôles différents, les plus courants étant les objets ou les scalaires (types de valeurs primitifs).

  • Champs  : les champs existent dans la portée d'un type et contiennent la valeur demandée au service GraphQL. Elles sont très similaires aux variables des autres langages de programmation. La forme des données que vous définissez dans vos champs déterminera la manière dont les données sont structurées au cours d'une request/response opération. Cela permet aux développeurs de prédire ce qui sera renvoyé sans savoir comment le backend du service est implémenté.

Pour visualiser à quoi ressemblerait un schéma, examinons le contenu d'un schéma GraphQL simple. Dans le code de production, votre schéma se trouve généralement dans un fichier appelé schema.graphql ouschema.json. Supposons que nous examinions un projet qui implémente un service GraphQL. Ce projet stocke les données du personnel de l'entreprise et le schema.graphql fichier est utilisé pour récupérer les données du personnel et ajouter de nouveaux membres du personnel à une base de données. Le code peut ressembler à ceci :

schema.graphql
type Person { id: ID! name: String age: Int } type Query { people: [Person] } type Mutation { addPerson(id: ID!, name: String, age: Int): Person }

Nous pouvons voir que trois types sont définis dans le schéma : PersonQuery, etMutation. En y regardantPerson, nous pouvons deviner qu'il s'agit du modèle d'un employé de l'entreprise, ce qui ferait de ce type un objet. À l'intérieur de son périmètreid, nous voyonsname, etage. Ce sont les champs qui définissent les propriétés d'unPerson. Cela signifie que notre source de données stocke chacun Person d'eux name sous forme de type String scalaire (primitif) et age de type Int scalaire (primitif). Il id agit comme un identifiant spécial et unique pour chacunPerson. Il s'agit également d'une valeur obligatoire, comme l'indique le ! symbole.

Les deux types d'objets suivants se comportent différemment. GraphQL réserve quelques mots clés pour des types d'objets spéciaux qui définissent la manière dont les données seront renseignées dans le schéma. Un Query type permet de récupérer les données de la source. Dans notre exemple, notre requête peut récupérer Person des objets d'une base de données. Cela peut vous rappeler des GET opérations dans la terminologie RESTful. A Mutation modifiera les données. Dans notre exemple, notre mutation peut ajouter d'autres Person objets à la base de données. Cela peut vous rappeler des opérations de changement d'état telles que PUT ouPOST. Les comportements de tous les types d'objets spéciaux seront expliqués plus loin dans cette section.

Supposons que Query dans notre exemple, il récupérera quelque chose de la base de données. Si nous regardons les champs deQuery, nous voyons un champ appelépeople. La valeur de son champ est[Person]. Cela signifie que nous voulons récupérer une instance de Person dans la base de données. Cependant, l'ajout de crochets signifie que nous voulons renvoyer une liste de toutes les Person instances et pas seulement une instance spécifique.

Le Mutation type est chargé d'effectuer des opérations de changement d'état telles que la modification des données. Une mutation est responsable de l'exécution d'une opération de changement d'état sur la source de données. Dans notre exemple, notre mutation contient une opération appelée addPerson qui ajoute un nouvel Person objet à la base de données. La mutation utilise a Person et attend une entrée pour les age champs idname, et.

À ce stade, vous vous demandez peut-être comment les opérations telles addPerson fonctionnent sans implémentation de code, étant donné qu'elles sont censées exécuter un certain comportement et ressemblent beaucoup à une fonction avec un nom de fonction et des paramètres. Actuellement, cela ne fonctionnera pas car un schéma ne sert que de déclaration. Pour implémenter le comportement deaddPerson, il faudrait y ajouter un résolveur. Un résolveur est une unité de code qui est exécutée chaque fois que le champ qui lui est associé (dans ce cas, l'addPersonopération) est appelé. Si vous souhaitez utiliser une opération, vous devrez ajouter l'implémentation du résolveur à un moment donné. D'une certaine manière, vous pouvez considérer l'opération du schéma comme la déclaration de la fonction et le résolveur comme la définition. Les résolveurs seront expliqués dans une section différente.

Cet exemple montre uniquement les manières les plus simples dont un schéma peut manipuler des données. Vous créez des applications complexes, robustes et évolutives en tirant parti des fonctionnalités de GraphQL et AWS AppSync. Dans la section suivante, nous allons définir les différents types et comportements de champs que vous pouvez utiliser dans votre schéma.

Comme vous pouvez le constater, GraphQL comporte de nombreux composants mobiles. Dans cette section, nous avons montré la structure d'un schéma simple et les différents types et champs pris en charge par un schéma. Dans la section suivante, vous découvrirez les autres composants d'une API GraphQL et leur fonctionnement avec le schéma.