Traduire REST en GraphQL avec LoopBack 4 et OpenAPI-to-GraphQL …

Image for post
Image for post

LoopBack est un framework Node.js open source hautement extensible qui vous permet de:

  • Créer des API REST de bout en bout dynamiques avec peu ou pas de codage.
  • Accéder aux données des principales bases de données relationnelles, MongoDB, SOAP et API REST.
  • Intégrer des relations de modèle et des contrôles d’accès pour des API complexes.
  • Utiliser des composants séparables pour le stockage de fichiers, la connexion tierce et OAuth 2.0.
Image for post
Image for post

LoopBack est un framework Node.js et TypeScript open source hautement extensible basé sur Express qui vous permet de créer rapidement des API et des microservices composés de systèmes backend tels que des bases de données et des services SOAP ou REST.

Image for post
Image for post

Je crée pour ce test une petite instance Ubuntu 18.04 LTS dans Hetzner Cloud :

Image for post
Image for post

J’y installe Node.js :

Image for post
Image for post
Image for post
Image for post

Puis j’installe le client LoopBack via NPM :

Image for post
Image for post

La CLI LoopBack 4 est une interface de ligne de commande qui peut échafauder un projet ou une extension. La CLI fournit le moyen le plus rapide pour démarrer avec un projet LoopBack 4. Je peux alors créer un nouveau projet :

Image for post
Image for post

Dans ce projet test, je peux démarrer rapidement avec une route “Ping” fournie :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux ajouter un simple contrôleur “Hello World” comme suit :

Image for post
Image for post

via ce fichier TypeScript :

Image for post
Image for post

et je redémarre le tout avec npm start :

Image for post
Image for post

Test rapide avec HTTPie :

Image for post
Image for post

J’aurais pû également réutiliser un des exemples fournis dans le dépôt Github de LoopBack :

Image for post
Image for post

Le projet Todo répond avec OpenAPI et son fichier de spécification :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et sa documentation via Swagger :

Image for post
Image for post

J’effectue la traduction de cet API REST en GraphQL via OpenAPI-to-GraphQL. OpenAPI-to-GraphQL peut être utilisé soit comme une bibliothèque, soit via son interface de ligne de commande (CLI) pour démarrer rapidement. J’installe la CLI OpenAPI-to-GraphQL :

Image for post
Image for post
Image for post
Image for post

Je récupère le fichier openapi.json de l’API REST et j’utilise la CLI pour lancer ma traduction avec l’API GraphQL :

Image for post
Image for post

et accessible :

Image for post
Image for post

d’où cette requête simple avec GraphQL :

Image for post
Image for post

Je peux aussi réutiliser un exemple d’API REST existant comme le Swagger Petstore avec OpenAPI :

Image for post
Image for post
Image for post
Image for post

qui me permet de lancer une simple requête avec GraphQL :

Image for post
Image for post
Image for post
Image for post

Je peux aussi substituer LoopBack par FastAPI :

https://fastapi.tiangolo.com/

Image for post
Image for post

Installation rapide de FastAPI via pip :

Image for post
Image for post

et lancement de l’API REST avec OpenAPI via ce simple script python :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux récupérer le fichier openapi.json :

Image for post
Image for post

Je lance ma traduction en GraphQL :

Image for post
Image for post

avec cette simple requête :

Image for post
Image for post

À suivre ! …

Image for post
Image for post

DEV is sort of like Medium, but it’s open source and 100% focused on developers.

Now reaching over 3 million visitors per month, it’s the fastest growing software development community in the world.

It’s free, devoted to the open web, and will never have popups or a pay wall.

Originally published at https://dev.to on March 23, 2020.

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store