Grimm met en œuvre la spec MicroProfile OpenAPI 4.1, qui s’appuie elle-même sur OpenAPI 3.1.0. Cette page explique le vocabulaire — Components, Paths, Operations, Schemas — et la mécanique de fusion entre les différentes sources de modèle.
Le modèle OpenAPI 3.1
Le format OpenAPI décrit un service HTTP par un arbre JSON ou YAML structuré. Trois niveaux principaux :
| Niveau | Rôle |
|---|---|
|
Métadonnées du contrat : titre, version, licence, contact, description. |
|
Catalogue des opérations. Chaque clé est un chemin ( |
|
Catalogue de réutilisation : |
Le modèle Java de la spec MP OpenAPI 4.1 reflète cette structure : interface OpenAPI → Info, Paths, Components. Grimm fournit des implémentations concrètes (records ou classes finales) dans io.vidocq.grimm.internal.model, instanciées par sa propre OASFactoryResolver.
Trois sources, une fusion
La spec MP OpenAPI 4.1 §3 prescrit trois sources de modèle, fusionnées dans cet ordre :
-
Fichier statique —
META-INF/openapi.yaml,.ymlou.jsonpackagé dans le classpath. Lu parStaticFileReader. Représente le « squelette éditorial » fourni par l’équipe de design. -
OASModelReader— classe applicative implémentantorg.eclipse.microprofile.openapi.OASModelReader, désignée parmp.openapi.model.reader. Permet de construire unOpenAPIprogrammatique. -
Scan d’annotations — visite des classes
@Path,@OpenAPIDefinition,@Server,@Tag,@SecuritySchemedu module CDI courant. Effectuée parAnnotationScanner.
ModelMerger combine les trois — les annotations gagnent sur les conflits, conformément à la spec. Le résultat est un OpenAPI unique, déposé dans GrimmModelCache.
Filtres OASFilter
Une classe applicative implémentant org.eclipse.microprofile.openapi.OASFilter peut transformer le document après fusion, opération par opération. Activation via mp.openapi.filter=fqn.MonFiltre. Grimm invoque le filtre dans FilterInvoker, en un seul passage descendant qui dispatche sur les types Operation, PathItem, APIResponse, Schema, Parameter, etc.
|
Le filtre est exécuté une fois, à la construction du document, pas par requête. Il n’a donc pas accès à |
Configuration via MicroProfile Config
La spec MP OpenAPI 4.1 §4 définit un ensemble de clés mp.openapi.* lues via MicroProfile Config — fournies par Ravel dans l’écosystème Vidocq.
| Clé | Effet |
|---|---|
|
Désactive entièrement le scan d’annotations. |
|
Liste blanche de packages à scanner (comma-separated). |
|
Liste blanche de classes spécifiques. |
|
Packages exclus du scan. |
|
Classes exclues. |
|
FQCN du |
|
FQCN du |
|
Liste d’URL de serveurs à imposer sur le document. |
|
Snippet JSON décrivant un schéma pour une classe donnée (override). |
Voir Référence pour la liste exhaustive et les variantes servers.path. / servers.operation..
Différences avec OpenAPI 3.0 (rappel)
OpenAPI 3.1 (servi par MP OpenAPI 4.1) introduit l’alignement complet avec JSON Schema 2020-12 : type peut être un tableau (["string", "null"]), nullable est remplacé par cette syntaxe, examples est un tableau, webhooks est ajouté à la racine. Grimm reflète ces choix dans son sérialiseur.
Pour aller plus loin
-
Fonctionnement interne — pipeline détaillé, BCE Vauban, threading.
-
Référence — annotations, clés
mp.openapi.*, artefacts. -
Cas d’usage — exemples complets.