Data model et interfaces
Pour échanger des données de manière consistante, les services doivent utiliser des modèles de données et des protocoles d'échanges communs.
Le repository dev-model-interfaces
Le modèle de données ainsi que les interfaces des services (et par extension des ressources) sont définis dans le repository owlgrid/dev-model-interfaces.
L'objectif d'utiliser un repository central est de créer un environnement fortement typé et de limiter le risque d'erreurs.
L'architecture du repository est définie dans le fichier Readme à la racine du repository. En résumé, le repository est composé notamment d'un dossier resources
qui contient un sous-dossier par service. Chaque sous-dossier contient un autre sous-dossier avec la version du service (par exemple v1
). Ce sous-dossier est composé de définitions de modèles de données, d'opérations et d'erreurs.
Pour mieux comprendre le fonctionnement, n'hésitez pas à explorer owl-access/beta.
Génération
Le repository owlgrid/dev-model-interfaces est entièrement écrit en JSON afin d'être technology-agnostic et permettre donc de générer différents systèmes en plusieurs technologies.
Cette génération créée notamment les outputs suivants (pour un service Express-Typescript) :
- Resource tree JSON (agrégation des références dans un seul fichier);
- Types Typescript du service;
- Librairies d'erreurs Typescript;
- Stubs Typescript pour les fichiers d'opérations;
- SDK Typescript du service;
- Spécifications OpenAPI des opérations (HTTP uniquement) -> work in progress;
- Etc.
Types de services
Selon les types de services, la génération de code est différente. Par exemple, pour un service Node-Typescript avec une interface HTTP, la génération de code est différente de celle d'un service Lambda-Typescript (on ne génèrera pas de SDK pour Lambda-Typescript, alors que pour Node-Typescript si).
Les types de services sont définis dans les profiles, fichiers JSON stockés dans le dossier profiles
du repository owlgrid/dev-model-interfaces.