Was ist die richtige HTTP-Methode für das Upvoting?

8

Aus RESTful Sicht, was ist die am besten geeignete HTTP - Methode für die Aktion von upvoting einen Forenbeitrag (wie auf Stack)?

Ich würde POST für die Abstimmung und DELETE für die Annullierung der Abstimmung sagen, aber da Benutzer nur eine Stimme pro Nachricht abgeben dürfen, kann die Abstimmung als idempotente Operation angesehen werden, sodass auch PUT möglich ist.

Lortabac
quelle

Antworten:

6

PUT / posts / 323223 / Stimmen

Eine Abstimmung kann als Ressource angesehen werden, die ich versuchen würde. Ich würde keine Aktion gegen den Beitrag (/ posts / 323223) ausführen, da dies eine weitere Ressource ist. Dann müssten Sie eine zusätzliche Methode haben und es wird immer komplexer.

Luc Franken
quelle
7

Ich würde Ihnen PUTIhre Stimme oder DELETEes argumentieren . Sie bearbeiten den Forumsbeitrag nicht wirklich, POSTwären also unangemessen.

Bruno Schäpper
quelle
1

Dies hängt hauptsächlich davon ab, was Sie als Ihr eigentliches Zielobjekt betrachten.

Wenn Ihr Zielobjekt die Abstimmung ist , sollten Sie die Abstimmung wahrscheinlich an das System senden, da Sie tatsächlich den Status Ihres Zielobjekts (dessen internen Abstimmungszähler) ändern.

Trotzdem ist es viel wahrscheinlicher, dass Sie den Forumsbeitrag als Zielobjekt Ihrer Operation betrachten, und in diesem Fall ist ein PUT / DELETE-Operationssatz höchstwahrscheinlich konsistenter mit der REST-Phylosophie, da Sie nicht ändern / bearbeiten Ihr Forumsbeitrag. Sie legen / löschen nur einen Token in einen Zähler. Also würde ich den Vorschlag von Vain Fellowman unterstützen.

Die Tatsache, dass Abstimmungen eine idempotente Operation sein sollten, ist ein weiterer Hinweis, der Sie in diese Richtung führen sollte. Stellen Sie sich dies als eine ADD / REMOVE-Operation über die Mitgliedsvariable "vote" Ihrer Klasse / Ihres Objekts "forumPost" vor.

In Bezug darauf, wie Sie feststellen können, ob Ihr eigentliches Zielobjekt der Forumsbeitrag oder die Abstimmung ist, sollten Sie sich Ihren Code ansehen. Das "Objekt" (möglicherweise eine JSP-Seite + ein Java-Controller + eine Java-Entität, die auf eine DB-Tabelle verweist), das diese HTTP-Anforderung empfängt und verarbeitet, repräsentiert einen Forumsbeitrag oder eine Abstimmung?

AlexBottoni
quelle