Bibliothèque de serveur GraphQL pour Rust
GraphQL est un langage de requête de données développé par Facebook destiné à servir les interfaces d'applications mobiles et Web.
Juniper permet d'écrire des serveurs GraphQL dans Rust qui sont sécurisés et incroyablement rapides. Nous essayons également de rendre la déclaration et la résolution des schémas GraphQL aussi pratiques que Rust le permet.
Juniper n'inclut pas de serveur Web. Au lieu de cela, il fournit des éléments de base pour faciliter l'intégration avec les serveurs existants. Il fournit en option une intégration prédéfinie pour les frameworks Actix, Hyper, Rocket et Warp, y compris Graphiql et GraphQL Playground intégrés pour un débogage facile.
Le livre est également disponible pour la branche master et les anciennes versions publiées après la 0.11.1. Voir l'index du livre.
Le meilleur endroit pour commencer est le Juniper Book, qui contient des guides avec de nombreux exemples couvrant toutes les fonctionnalités de Juniper. (beaucoup de WIP)
Pour démarrer rapidement et avoir une idée de Juniper, consultez la section Démarrage rapide.
Pour des informations spécifiques sur les macros, les types et l'API Juniper, la référence API est le meilleur endroit où chercher.
Vous pouvez également consulter le schéma Star Wars pour voir un exemple complexe incluant le polymorphisme avec des traits et des interfaces. Pour un exemple d'intégration de framework Web, consultez les dossiers d'exemples actix, axum, hyper, rocket et warp.
Juniper prend en charge le langage de requête GraphQL complet selon la spécification (octobre 2021), y compris les interfaces, les unions, l'introspection de schéma et les validations. Il peut également générer le schéma dans le langage de schéma GraphQL.
À titre d'exception aux autres bibliothèques GraphQL pour d'autres langages, Juniper crée par défaut des types non nuls. Un champ de type Vec<Episode>
sera converti en [Episode!]!
. Le type Rust correspondant pour par exemple [Episode]
serait Option<Vec<Option<Episode>>>
.
Juniper est indépendant du format de sérialisation et du transport réseau.
Juniper prend en charge l'exécution asynchrone et synchrone en utilisant respectivement execute()
et execute_sync()
. L’exécution asynchrone est indépendante du temps d’exécution.
Juniper suit une approche axée sur le code pour définir les schémas GraphQL. Si vous souhaitez plutôt utiliser une approche basée sur le schéma, envisagez Juniper-from-schema pour générer du code à partir d'un fichier de schéma.
Juniper s'intègre automatiquement avec certaines caisses Rust très courantes pour faciliter la création de schémas. Les types de ces caisses seront automatiquement utilisables dans vos schémas.
Juniper n'a pas encore atteint la version 1.0, il faut donc s'attendre à une certaine instabilité de l'API.