De bons outils pour la gestion des versions de modèles REST pour Java

Je recherche de bons outils pour prendre en charge la modification de la version du modèle utilisé dans les services REST. Les outils de mes rêves feraient quelque chose comme:

  • Mon pojo + version 1.0 config / transformer => Service disponible avec 1.0 de mon modèle
  • Mon Pojo + version 1.1 config / transformer => Service disponible avec 1.1 de mon modèle

Dans mon cas particulier, je n’ai pas besoin de faire la transformation inverse, car mon service REST ne fournira que la recherche de données et ne stockera jamais de données, mais l’utilisation d’un outil permettant de faire les deux ne me dérange pas: -)

Une solution que je considère consiste à append des annotations personnalisées dans mon pojo (version + nom) et à créer un générateur de code qui générera du JSON / XML basé sur mon pojo en fonction du numéro de version. Bien que je ressente ici que je réinvente la roue.

Edit: Voici un exemple de changement pouvant être effectué de la version 1 à la version 1.1:

Version 1: Nom de famille Nom de famille

Version 1.1 Nom de famille Nom de famille date de naissance

Si vous accédez à l’API avec la version 1.0, vous n’obtenez pas l’atsortingbut birthdate – il est uniquement disponible dans la version 1.1. Je veux un support d’outils pour rendre ces services disponibles, où je peux configurer celui-ci si mon pojo (qui est actuellement la version 1.1), je veux rendre disponible une version 1.0 qui ne montre pas ces valeurs.

D’autres modifications légales au modèle pourraient consister à supprimer un atsortingbut ou à renommer un atsortingbut (ou même à renommer une entité).

Edit 2: Digital Joel a indiqué dans un commentaire que, pour une discussion sur la gestion des versions de l’API, vous devez vous rendre sur https://stackoverflow.com/posts/9789756/ .

Le moyen le plus simple de sortir du versioning est bien sûr de ne pas effectuer de modifications arriérées des API, mais des modifications commerciales, de sorte que cela n’est pas toujours possible. Mon intérêt est de rendre ces modifications plus simples à gérer, d’où ma question.

Edit 3: J’ai cherché des outils qui pourraient aider le processus, mais toujours rien qui relie cela de manière positive au repos. Voici les liens que j’ai trouvés jusqu’à présent:

  • http://wiki.pmease.com/display/xmt/What%27s+XMT (Ressemble à une bibliothèque d’aide à la sérialisation des pojos en xml avec la gestion des versions)

Comme indiqué dans une réponse, il n’existe peut-être aucun outil pour lequel le contrôle de version automatique des API est disponible.

Nous pouvons relever ce défi avec une approche en deux étapes:

1) Informations de version de l’API Il existe de nombreux débats sur les meilleures pratiques. Les deux plus populaires sont:

(i) URI redesign - putting version info in URI like http://something.com/v1.0/resource1/ or http://something.com/resource1?ver=1.0 (ii) Using HTTP Header - putting version info in Accept/Content-Type header keeping URI intact like # GET /something/ HTTP/1.1 Accept: application/resource1-v1.0+json 

2) Plusieurs versions du même pojo en utilisant la bibliothèque json / xml

Une fois les informations de version fournies, nous devons générer les ressources en conséquence. Il existe de nombreuses bibliothèques json et xml avec lesquelles nous pouvons gérer plusieurs versions du même pojo et sérialiser uniquement les atsortingbuts requirejs en fonction de la version. La bibliothèque Google gson java fonctionne très bien à cet égard. Consultez https://sites.google.com/site/gson/gson-user-guide#TOC-Versioning-Support

 public class Person{ @Since(1.0) private Ssortingng firstname; @Since(1.0) private Ssortingng lastname; @Since(1.1) private Ssortingng birthdate; } 

Je ne connais aucun outil permettant de gérer automatiquement la version de votre API RESTful. Pour une discussion approfondie sur la gestion des versions de REST, vous devez lire Meilleures pratiques pour la gestion des versions d’API? .

J’ai passé pas mal de temps à examiner cela lors de la planification d’une API RESTful, et nous en sums venus à la conclusion que nous évoluerions de manière à ne pas introduire de changements radicaux. Si un changement radical est requirejs, nous l’exposerions en tant que nouvelle ressource plutôt que d’essayer d’utiliser les informations de version dans un en-tête personnalisé ou un type mime. Mais, à votre question, cela signifie travailler de mon côté, ce qui incite encore plus à ne pas apporter de changements radicaux.

En ce qui concerne les outils, je doute fort que vous allez trouver quelque chose qui puisse effectuer automatiquement les modifications requirejses pour prendre en charge plusieurs versions de votre API RESTful. Cela nécessiterait un outil qui comprend les différences entre deux versions de votre modèle et toutes les interactions de votre API.

Si vous vous conformez au principe HATEOAS de REST, toutes les destinations d’un emplacement donné sont également incluses dans la réponse. Dans ce cas, vous pouvez utiliser quelque chose comme le support REST des mappages de demandes dans Spring MVC pour conserver le numéro de version dans tous vos fichiers. Les URL ne sont atsortingbuées qu’à un seul point d’entrée du client, mais vous devrez tout de même conserver les contrôleurs et le modèle pour chaque version.

Ce n’est pas la réponse à laquelle vous pouvez vous attendre puisque je n’utilise pas un outil externe open source pour faire le gros du travail pour moi. J’utilise mon propre outil.

J’utilise Jersey. J’utilise / vx / inclus dans mes déclarations @Path.

Comme les apis REST représentent des contrats, je ne fais pas confiance à la création automatique. Pourtant, j’ai réalisé un outil XLST dans un plugin Maven peu complexe.) Je conserve la version XML succincte et me transforme en classe Jersey en gensrc.

J’ai constaté que v1 avait un certain chemin et des parameters de masortingce / requête uniques à la conception à l’époque. Lorsque je développe v2, je constate souvent que je dois prendre en charge des parameters supplémentaires ou restructurer mes URL pour une meilleure compréhension. J’ai juste besoin de changer le fichier XML.

Mon moteur de génération créera ma couche Jersey avec MyAPIv1.java et MyAPIv2.java et sera annoté en fonction des besoins du moment.

Je veux donc garder le contrôle du versioning et avoir un auto / outil pourrait être préjudiciable.

Encore une fois, l’utilisation d’une spécification est un excellent moyen de contrôler totalement, mais non de mettre pleinement en œuvre les couches minces.

Donc, pas de cigare ici, mais cela peut être utile.

juste une pensée, mais ne serait-il pas plus agréable de rendre votre api rétrocompatible; alors vous avez seulement besoin de la gestion des versions pour votre référentiel de code et c’est beaucoup moins compliqué?

Parlez-vous de quelque chose qui va changer cette version pour vous dans le monde du développement (maintenir les versions de votre API pour les donner aux utilisateurs) ou dans le monde du serveur en direct (négociation de contenu à l’exécution)?

Pour les premiers, regardez des outils tels que maven, ivy, gradle… c’est ce qu’ils sont. Personnellement, j’utilise Maven parce que c’est celui que je connais le mieux, mais ils vous permettent tous de publier des fichiers jar avec des versions à cette fin.