Je construis un petit outil pour aider les gens à décider des activités de groupe, comme le restaurant où ils devraient aller déjeuner. Mes objets sont des événements, des options et des préférences. Un événement a plusieurs options, un utilisateur peut classer les options sur un inventeur dans l'ordre. Ainsi, les votes d'un utilisateur peuvent être 1: option B, 2: option A, 3: option C.Comment est-ce que cela correspond à une interface RESTful?
Ma question est quelle est la meilleure façon de mapper cela à REST? Il semble clair que j'appuyer CRUD sur les événements, avec
GET /events/ : list of events
POST /events/ : create a new event
GET /events/1 : get event one
and on options with:
POST /events/1/options : add a new option to the event
(dans tous les cas, il doit y avoir un utilisateur authentifié)
Là où je confonds est de savoir comment un vote utilisateur sur les options pour la un événement. Ce qui semble le mieux correspondre à REST est de faire un PUT pour chaque option, à/events/1/options/1/vote, mais cela semble être difficile à faire respecter les exigences entre les votes, par exemple, si je voulais forcer les votes pour classer les options sans les liens, je pourrais le faire si j'ai obtenu tous les votes à la fois, comme dans 1 B, 2 A, 3 C, mais si l'utilisateur change ses votes à 1 C, 2 B, 3 A, l'application serait dans un état non valide entre ces demandes.
Est-ce que je devrais faire les votes un seul paquet, et y accéder à/events/1/votes?
(Cela peut sembler une quantité excessive de la planification d'un projet de week-end, mais mon but est de le faire droit, puisque je ne l'ai pas le luxe sur le code que je suis payé pour écrire.)
Les URI n'ont pas d'importance - l'important est que ces URI soient envoyées en réponse à un point d'entrée, en tant que champs, afin que le client n'ait pas à les construire ou à connaître leur contenu. – aehlke