2009-09-13 8 views
4

Je suis en train de concevoir un service web REST et j'ai des questions sur la meilleure/bonne conception.Questions sur la conception REST correcte

Une méthode de recherche devrait être POST, puisque les demandes identiques n'ont pas à retourner les mêmes données, non? Aussi, est-il préférable de faire/search/term ou/search et avoir un terme comme post-var?

Aussi, et si une ressource peut être mise à jour à tout moment, la méthode pour le retourner serait-elle un GET ou un POST. Il semble préférable d'être un GET, mais comme il peut changer au fil du temps, il n'est pas idempotent.

+0

Vous avez mal compris le sens de idempotence. J'aime utiliser la règle suivante: Si l'utilisateur ne fait qu'une requête et que le serveur reçoit deux fois la même requête, cela aura-t-il un effet inattendu? Si oui, la requête n'est pas idempotente. Dans votre exemple, si un utilisateur fait un GET pour une ressource et que le serveur reçoit deux fois la requête, le résultat final est que l'utilisateur verra probablement les résultats de la deuxième requête. Du point de vue de l'utilisateur, ils ont récupéré exactement ce qu'ils ont demandé, même si cela a pris un peu plus de temps. –

Répondre

1

Puisque vous ne modifiez pas la ressource, je vous recommande d'utiliser un GET avec le terme de recherche dans l'URL. L'expiration du cache sur la page doit être correctement définie (comme pour toutes les autres ressources). Dans ce cas, vous pouvez même désactiver complètement la mise en cache.

+0

Poursuivant ce que j'ai dit à William Pietri ci-dessus, je suppose que cela pourrait fonctionner pour la méthode de recherche avec seulement le cache désactivé. En théorie, je pourrais désactiver le cache sur d'autres ressources, car ils peuvent être mis à jour à tout moment et ont la méthode pour les obtenir un GET? –

0

Je recommande un GET avec/Recherche/terme Pour mettre à jour POST Pour créer un nouveau quelque chose PORTER

+1

Vous ne pouvez pas corréler directement POST pour mettre à jour et créer pour PUT. PUT peut mettre à jour et créer, POST pourrait créer, mettre à jour ou ne pas faire. Le comportement de POST n'est pas défini par la spécification HTTP, il y a simplement des suggestions de ce qui est couramment utilisé pour ce qu'il pourrait être utilisé. –

+0

@Darrel Miller bon point mais juste comme "ce sont des suggestions simples" il a répondu était simplement une "recommandation" ation. 8) – ScottCher

Questions connexes