2015-10-08 5 views
1

Pour le service REST est-il une meilleure pratique d'accepter la demande complète en entrée à votre service (comme ci-dessous - Option- A) ou devrions-nous accepter des paramètres individuels comme dans l'option - B:REST Les meilleures pratiques

Option - A:

@GET 
     @Produces("text/plain") 
     public String hello(@Context HttpServletRequest req) { 
    } 

Option - B

@GET 
     @Produces("text/plain") 
     public String hello(@PathParam("id") int id, @BeanParam etc.) { 
    } 

Répondre

2

Je pense qu'il est préférable de tirer parti de l'appui fourni par JAX-RS pour extraire le contenu de la demande que de travailler directement sur l'objet de la demande. Cela enlèvera la plomberie technique et vous pourrez vous concentrer sur votre propre traitement.

En outre, l'API Servlet n'est pas vraiment orientée REST. Je veux dire, par exemple, en ce qui concerne les variables/paramètres de chemin, vous devez les extraire par vos propres moyens.

espérons qu'il vous aidera, Thierry

+0

On dirait que vous votez pour Option-B, mais dans les cas où nous devons extraire l'identifiant de session dans le service REST, l'option A serait-elle préférable car nous passons déjà l'objet de requête complet, car nous n'allons pas encombrer la signature de la méthode avec annotation supplémentaire pour récupérer les paramètres? – techcurious

0

Une ressource de repos est généralement identifié par son nom et les paramètres de chemin (en option).

Exemple:/tweets/{123} - Ceci indique 'Donne-moi un tweet de la collection de tweets identifié par son identifiant (123)'

Le style reste de la conception pourrait ne pas mandater le fournisseur de services doit exposer la ressource à travers des paramètres de chemin/requête mais l'idée générale est que les paramètres de chemin identifient de manière unique une ressource et que les paramètres de requête doivent être utilisés comme filtres. Dans votre cas, le choix évident serait d'opter pour les paramètres de chemin mais vous devez utiliser l'objet de requête injecté uniquement dans le but de garder trace des choses comme l'utilisateur distant, l'identifiant de session etc. qui ne serait pas être utilisé pour identifier la ressource mais quelque chose qui sera utilisé en interne.