Qual é o método HTTP certo para a votação?

8

Do ponto de vista RESTful , qual é o método HTTP mais apropriado para a ação de votar em uma postagem do fórum (como no StackExchange)?

Eu diria POST para votação e DELETE por cancelamento de votação, mas como os usuários têm permissão para votar apenas uma vez por mensagem, a votação pode ser considerada uma operação idempotente , portanto PUT também pode ser possível.

Lortabac
fonte

Respostas:

6

PUT / posts / 323223 / votos

Uma votação pode ser vista como um recurso que eu tentaria. Eu não realizaria nenhuma ação contra a postagem (/ posts / 323223), pois esse é outro recurso. Então você precisaria ter um método adicional e ele começará a ficar complexo.

Luc Franken
fonte
7

Eu diria o PUTseu voto, ou DELETEele. Na verdade, você não edita a postagem do fórum, portanto, POSTseria inadequado.

Bruno Schäpper
fonte
1

Depende principalmente do que você considera o seu objeto de destino real .

Se o seu objeto de destino é a votação , você provavelmente deve POSTAR a votação para o sistema porque está realmente alterando o estado do seu objeto de destino (seu contador interno de votos).

Apesar disso, é muito mais provável que você considere a postagem no fórum como o objeto de destino de sua operação e, nesse caso, provavelmente um conjunto de operações PUT / DELETE seja mais consistente com a filosofia REST, porque você não está alterando / editando sua postagem no fórum. Você está apenas colocando / excluindo um token em um contador. Então, eu apoiaria a sugestão de Vain Fellowman.

O fato de a votação ser uma operação idempotente é outra pista que deve levá-lo nessa direção. Pense nisso como uma operação ADD / REMOVE sobre a variável de membro "vote" da sua classe / objeto "forumPost".

Em relação a como saber se o seu objeto de destino real é a postagem no fórum ou a votação, acho que você deve examinar seu código. O "objeto" (talvez uma página JSP + um Java Controller + alguma Entidade Java que se refira a alguma tabela do banco de dados) que recebe e manipula essa solicitação HTTP está representando uma postagem no fórum ou uma votação?

AlexBottoni
fonte