Question

Actuellement, je conçois comment gérer le routage dans une API de repos versionnée où la version ne fait pas partie de l'URL, mais est envoyée via une variable d'en-tête.

J'ai considéré/vu des choses comme :

Réécriture de l'URL en fonction de la variable d'en-tête, c'est-à-direla demande /orders {X-Media-Type: v1} réécrirait dans /v1/orders et nous pourrions alors avoir un @Path("/v1/orders") OrderV1Resource {} et donc faire la v2 serait trivial @Path("/v2/orders") OrderV2Resource {}.(ma première préférence) Comment utiliser un filtre de servlet en Java pour modifier l'URL d'une requête de servlet entrante ?

Avoir un célibataire @Path("/orders") OrderResource {} où chacune de ses méthodes a un HeaderParam injecté et je pourrais vérifier la variable d'en-tête, puis décider quelle implémentation de l'API Order je voulais utiliser (ce qui me semble très compliqué)

// pseudo-java code
@Path("/orders") 
OrderResource {
   OrderV1Impl v1Impl;
   OrderV2Impl v2Impl;
   @GET
   public List<Order> findAll(@HeaderParam header) {
       version = header.get("accepts")
       if(version.equals("v1")) { return v1Impl.findAll() }
       else if(version.equals("v2")) { return v2Impl.findAll() }
       return error
   }
}

Ou simplement les regrouper dans des JARS séparés et demander à un service d'examiner l'en-tête et de l'acheminer vers la version correcte.(cela semble logique si l'application devient vraiment volumineuse)

Était-ce utile?

La solution

J'ai fini par transmettre la version via un en-tête, puis je l'ai utilisé pour acheminer la ressource souhaitée via un javax.servlet.Filter.

Exemple d'en-tête Accept :Accept: application/vnd.datarank.v1+json

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top