Traduire REST en GraphQL avec LoopBack 4 et OpenAPI-to-GraphQL ...
Tags: graphql, rest, node, python
Published: 2020-03-23 17:29:16

![](https://telegra.ph/file/9be316207f8d714484de1.png)

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.

![](https://telegra.ph/file/56287cb3a1e2f46b007fc.jpg)

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.

<https://loopback.io/>

![](https://telegra.ph/file/1f6a6c081872f2c41a324.jpg)

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

![](https://telegra.ph/file/8f7b0208cd151efe0b116.jpg)

J'y installe Node.js :

![](https://telegra.ph/file/87d0614df7907e18fb70b.png)

![](https://telegra.ph/file/b458cb18dec4c96023258.png)

Puis j'installe le client LoopBack via NPM :

![](https://telegra.ph/file/27d3cd3567f66230f10f2.png)

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 :

![](https://telegra.ph/file/b3b480386cd7ecd941143.png)

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

![](https://telegra.ph/file/956839cb2bae9cc824f59.png)

![](https://telegra.ph/file/da11740f4a0b2ea77980d.png)

![](https://telegra.ph/file/0cb811bf96b13f1c09963.png)

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

![](https://telegra.ph/file/e524a0e28b9465643c7f1.png)

via ce fichier TypeScript :

![](https://telegra.ph/file/c097898be0f4791e81708.png)

et je redémarre le tout avec `npm start :`

![](https://telegra.ph/file/d4787f17ada7f048dd651.png)

Test rapide avec HTTPie :

![](https://telegra.ph/file/386103a8c8f85a42de5ac.png)

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

![](https://telegra.ph/file/9be37d06b854e79cb3411.png)

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

![](https://telegra.ph/file/1fa581743f6f35e9ae240.jpg)

![](https://telegra.ph/file/35718779ac0b09d3b473c.jpg)

![](https://telegra.ph/file/e8ec4adb4552a39bf340a.png)

![](https://telegra.ph/file/26637c7054a2fd33a1b5b.jpg)

et sa documentation via Swagger :

![](https://telegra.ph/file/a17b04b7bfdb8331abdcd.jpg)

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 :

![](https://telegra.ph/file/9cfe113bedaee3003eea3.png)

![](https://telegra.ph/file/2101c1551c9a080ef93db.png)

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 :

![](https://telegra.ph/file/d17811be1fdc75767e28e.png)

et accessible :

![](https://telegra.ph/file/d83c244f6b77b563b6aa6.jpg)

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

![](https://telegra.ph/file/e556fe0aeebdf8e54fb54.jpg)

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

![](https://telegra.ph/file/6cf919850481cf2799584.jpg)

![](https://telegra.ph/file/13509ad85fdec226b906b.png)

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

![](https://telegra.ph/file/1b9155389bcf8224ff633.jpg)

![](https://telegra.ph/file/413524f5af8d8280559db.jpg)

Je peux aussi substituer LoopBack par FastAPI :

<https://fastapi.tiangolo.com/>

![](https://telegra.ph/file/0cbb25f713d1be70c0b1c.jpg)

Installation rapide de FastAPI via pip :

![](https://telegra.ph/file/ab75c1751165f0aee273c.png)

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

![](https://telegra.ph/file/64621905b4cd589041178.png)

![](https://telegra.ph/file/89f86c0d844eab12e5ac7.jpg)

![](https://telegra.ph/file/0fca105a424818cce4fe4.jpg)

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

![](https://telegra.ph/file/bc77610b89f3251766f0d.jpg)

Je lance ma traduction en GraphQL :

![](https://telegra.ph/file/00268dd176a60b8f81732.png)

avec cette simple requête :

![](https://telegra.ph/file/313417f6671d81862a252.jpg)

À suivre ! ...

![](https://telegra.ph/file/3f16507710558b332971d.png)