2013-01-14 2 views
0

Lorsque j'ai une ressource, disons customers/3 qui retourne l'objet client et je veux retourner cet objet avec différents champs, ou d'autres changements (par exemple disons que j'ai besoin d'inclure dans l'objet client aussi son dernier achat (par souci de rapidité je ne veux pas faire 2 requêtes différentes)).Différentes représentations d'une ressource

Comme je vois mes options sont:

  • customers/3/with-latest-purchase
  • customers/3?display=with-latest-purchase

Dans la première option, il est URI distinct pour la nouvelle représentation, mais est-ce vraiment nécessaire? Comment puis-je dire au client que cette URI existe?

Dans la deuxième option, il existe un paramètre GET indiquant au serveur le type de représentation à renvoyer. Les paramètres URI peuvent être expliqués par la méthode OPTIONS et il est plus facile de dire au client où chercher les données car toutes les représentations sont toutes dans un endroit.

Donc, ma question est de savoir lequel de ces derniers est le meilleur (plus RESTful) et/ou y at-il une meilleure façon de le faire que je ne sais pas?

+1

les deux sont différents URI –

Répondre

1

Je pense que le mieux est de définir des objets de service indivisibles atomiques, par ex. customer et customer-latest-purchase, agréable, propre, simple. Ensuite, si le client veut un client avec ses derniers achats, ils invoquent les deux appels de service, au lieu de brouiller tout en un avec des paramètres funky.

Différentes représentations d'un objet sont OK en Java à travers les interfaces mais je pense que c'est une mauvaise idée pour REST car cela compromet sa simplicité.

+0

Mais d'après ce que je comprends, il est préférable de fusionner plus de ressources en un pour réduire le nombre de demandes ... –

+0

je ne le ferais pas. il peut s'agir d'une petite amélioration des performances au détriment de la propreté et de la simplicité du code – amphibient

0

Il existe une idée fausse selon laquelle faire ressembler des paramètres de requête à des chemins de fichiers est plus RESTful. La partie de requête de l'adresse est incluse lors de la détermination d'un URI distinct de sorte que la deuxième option est correcte.

Y a-t-il un grand impact sur les performances en incluant les dernières données d'achat dans toutes les requêtes GET client? Si ce n'est pas le cas, la chose la plus simple serait de le faire afin qu'il n'y ait pas de paramètres d'URL bizarres ou de demandes doubles. Si l'obtention de la dernière commande est une difficulté importante (ce qui ne devrait probablement pas être le cas), il n'y a rien de mal à ajouter un drapeau dans la chaîne de requête pour l'inclure.

Questions connexes