Comparaison REST et GraphQL - AWS AppSync

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.

Comparaison REST et GraphQL

APIs(Interfaces de programmation d'applications) jouent un rôle crucial dans la facilitation de l'échange de données entre les applications. Comme indiqué précédemment, deux approches de conception importantes APIs ont émergé : GraphQL et. REST Bien que les deux aient pour objectif fondamental de permettre la communication client-serveur, ils diffèrent considérablement dans leur mise en œuvre et leurs cas d'utilisation.

GraphQL REST partage plusieurs caractéristiques clés :

  1. Modèle client-serveur : les deux utilisent une architecture client-serveur pour l'échange de données.

  2. Apatridie : aucun des deux ne conserve les informations de session client entre les demandes.

  3. HTTPBasé : les deux sont généralement utilisés HTTP comme protocole de communication sous-jacent.

  4. Conception axée sur les ressources : Les deux conçoivent leur échange de données autour des ressources, qui font référence à toute donnée ou objet auquel le client peut accéder et manipuler via le. API

  5. Flexibilité du format de données : JSON c'est le format d'échange de données le plus couramment utilisé dans les deux cas, bien que d'autres formats similaires XML HTML soient également pris en charge.

  6. Indépendamment du langage et de la base de données : les deux peuvent fonctionner avec n'importe quel langage de programmation ou structure de base de données, ce qui les rend hautement interopérables.

  7. Support de mise en cache : les deux prennent en charge la mise en cache, ce qui permet aux clients et aux serveurs de stocker les données fréquemment consultées pour améliorer les performances.

Tout en partageant certains principes fondamentaux, GraphQL et moi REST différons considérablement dans leur approche de la API conception et de la récupération des données :

  1. Structure des demandes et récupération des données

    RESTutilise différentes HTTP méthodes (GET,, POSTPUT,DELETE) pour effectuer des opérations sur les ressources. Cela nécessite souvent plusieurs points de terminaison pour différentes ressources, ce qui peut entraîner des inefficiences dans la récupération des données. Par exemple, l'exécution d'une GET opération visant à récupérer les données d'un utilisateur peut entraîner une extraction excessive ou insuffisante des données. Pour obtenir les données correctes, il est possible de procéder à une troncature ou à plusieurs opérations.

    GraphQL utilise un point de terminaison unique pour toutes les opérations. Il s'appuie sur des requêtes pour récupérer des données et des mutations pour modifier les données. Les clients peuvent utiliser des requêtes pour récupérer exactement les données dont ils ont besoin en une seule demande, ce qui réduit la surcharge réseau en minimisant le transfert de données.

  2. Schéma côté serveur

    RESTne nécessite pas de schéma côté serveur, bien qu'un schéma puisse être défini en option pour une API conception et une documentation efficaces.

    GraphQL utilise un schéma fortement typé côté serveur pour définir les données et les services de données. Le schéma, écrit en GraphQL Schema Definition Language (SDL), inclut des types d'objets et des champs pour chaque objet, ainsi que des fonctions de résolution côté serveur qui définissent les opérations pour chaque champ.

  3. Contrôle de version

    RESTinclut souvent la gestion des versions dans leURL, ce qui peut entraîner la maintenance simultanée de plusieurs API versions. La gestion des versions n'est pas obligatoire, mais elle peut aider à éviter des modifications intempestives.

    GraphQL favorise une évolution continue du API sans versionnement explicite en exigeant une rétrocompatibilité. Les champs supprimés renvoient des messages d'erreur, tandis que les balises de dépréciation suppriment progressivement les anciens champs et renvoient des messages d'avertissement.

  4. Gestion des erreurs

    RESTest faiblement typé, ce qui nécessite que la gestion des erreurs soit intégrée au code environnant. Cela peut ne pas identifier automatiquement les erreurs liées au type (par exemple, l'analyse d'un nombre sous forme de texte).

    En revanche, GraphQL est fortement typé et nécessite une définition de schéma complète. Cela permet à votre service d'identifier automatiquement de nombreuses erreurs de demande avec un niveau de détail élevé.

  5. Cas d'utilisation

    RESTest mieux adapté pour :

    • Applications plus petites avec des exigences de données moins complexes.

    • Scénarios dans lesquels les données et les opérations sont utilisées de la même manière par tous les clients.

    • Applications ne nécessitant pas de requêtes de données complexes.

    GraphQL est mieux adapté pour :

    • Scénarios avec bande passante limitée, où il est crucial de minimiser les demandes et les réponses.

    • Applications avec plusieurs sources de données qui doivent être combinées sur un seul point de terminaison.

    • Cas où les demandes des clients varient considérablement et nécessitent des structures de réponse différentes.

    Notez qu'il est possible d'utiliser GraphQL et REST APIs au sein d'une seule application pour différents domaines de fonctionnalités. En outre, vous pouvez effectuer une mise à niveau RESTful API pour inclure les fonctionnalités de GraphQL sans réécriture complète. Consultez Comment créer des résolveurs GraphQL pour les sources de AWS données pour un exemple.