MicroProfile 2.1

MicroProfile 2.1 est la dernière version (au moment de l'écriture de cet article) du projet MicroProfile de la fondation Eclipse ; c'est une spécification parapluie qui fournit un ensemble d'API axées sur l'écriture de microservices, afin de permettre une innovation rapide dans l'écosystème Java entreprise.
MicroProfile 2.x reprend certaines spécifications de Java/Jakarta EE 8, à savoir CDI, JAX-RS, JSON-B et JSON-P.

Dans la page MicroProfile and Jakarta EE / Java EE 8 Server Support Matrix, Adam Bien présente les serveurs, comme Payara Micro ou Open Liberty, supportant MicroProfile.
Noter que MicroProfile 2.1 ne diffère de sa version précédente 2.0, que par la mise à jour de la spécification MicroProfile OpenTracing 1.2.

Composants de MicroProfile 2.1

MicroProfile 2.1 comprend les composants suivants :

Propre à MicroProfile, cette spécification définit un mécanisme d'utilisation souple et extensible de configuration des applications.
Chaque implémentation de cette spécification doit fournir, au minimum, les sources de valeurs configurées correspondant aux propriétés systèmes, aux variables d'environnement, et à chaque fichier de propriétés META-INF/microprofile-config.properties présent dans le classpath.

Cette spécification définit une API standard permettant aux applications de mettre en oeuvre de la tolérance aux pannes, en agissant sur la logique d'exécution ; par exemple en définissant des temporisations, des stratégies de tentatives d'invocations, ou des coupe-circuits.

Comme son nom l'indique, cette spécification fournit la possibilité d'indiquer la disponibilité et le statut d'un environnement d'exécution MicroProfile. Cela s'utilise dans le cadre d'échanges entre machines (M2M) dans des environnements conteneurisés.
L'implémentation de cette spécification fournit un point de terminaison /health qui représente le statut binaire (UP ou DOWN) de l'ensemble des applications installées dans l'environnement d'exécution, chacune d'elles pouvant fournir une ou plusieurs procédures de contrôle de santé.

Au travers de cette API, Microprofile permet la sécurisation des points de terminaison des microservices basée sur des rôles, en utilisant OpenID Connect et JSON Web Token (JWT).
Un appelant s'authentifie au moyen d'un jeton JWT, qui est essentiellement une chaîne de caractères JSON avec des champs pour spécifier le nom de l'utilisateur et les groupes auxquels il appartient ; ce jeton est signé de manière cryptographique.

Cette API a été conçue pour fournir un support de surveillance des applications ainsi que pour l'environnement d'exécution sous-jacent. Différents indicateurs (dont certains sont requis par la spécification) sont collectés pendant la durée de vie des applications, et automatiquement exposés via REST sur HTTP sous le chemin de base /metrics, au format JSON ou Prometheus.

Cette spécification vise à fournir un ensemble d’interfaces Java et de modèles de programmation permettant aux développeurs de produire de manière native des documents conforme à la spécification OpenAPI v3 de leurs applications exposant des services REST via JAX-RS.
Semblable au contrat WSDL pour les services Web SOAP, la spécification OpenAPI v3 est le contrat pour les services RESTful.
Le document OpenAPI devrait être publié au point de terminaison /openapi.

Cette spécification définit une API et les actions associées permettant aux services REST de participer facilement à un environnement de traçage distribué, de manière à suivre les flots d'exécution des requêtes entre les services.
L'outil de traçage distribué est supposé être une implémentation compatible OpenTracing (par exemple Zipkin ou Jaeger) présente dans l'environnement.

Cette spécification décrit une approche typée pour appeler des services RESTful sur HTTP. Un de ses objectifs est de fournir un style de codage beaucoup plus naturel, l’implémentation sous-jacente prenant en charge la communication entre le client et le service.
Ainsi, pour invoquer un service distant, on utilise une approche déclarative par la définition d'une interface, avec des méthodes annotées représentant les chemins et opérations du service cible.

  • CDI 2.0

Voir JSR 365: Contexts and Dependency Injection for Java 2.0.

  • Common Annotations 1.3

Voir JSR 250: Common Annotations for the Java Platform.

  • JAX-RS 2.1

JAX-RS fournit à la fois des API client et serveur standards pour la communication RESTful entre clients et services.

Voir JSR 370: JavaTM API for RESTful Web Services (JAX-RS 2.1) Specification.

  • JSON-B 1.0

Voir JSR 367: Java API for JSON Binding (JSON-B).

  • JSON-P 1.1

Voir JSR 374: Java API for JSON Processing 1.1.