Talvez esteja atrasado para o jogo, mas me deparei com esse problema semântico enquanto tentava criar uma API REST.
Para expandir um pouco a resposta de Wrikken, acho que você pode usar qualquer uma delas, 409 Conflict
ou 403 Forbidden
dependendo da situação - em resumo, use um erro 403 quando o usuário não puder fazer absolutamente nada para resolver o conflito e concluir a solicitação (por exemplo, não pode enviar um DELETE
solicitação para remover explicitamente o recurso) ou use 409 se algo puder ser feito.
O servidor entendeu a solicitação, mas está se recusando a atendê-la. A autorização não ajudará e a solicitação NÃO DEVE ser repetida. Se o método de solicitação não foi HEAD e o servidor deseja tornar público o motivo pelo qual a solicitação não foi atendida, DEVE descrever o motivo da recusa na entidade. Se o servidor não desejar disponibilizar essas informações ao cliente, o código de status 404 (Não encontrado) poderá ser usado.
Atualmente, alguém diz "403" e um problema de permissão ou autenticação vem à mente, mas a especificação diz que é basicamente o servidor que diz ao cliente que não vai fazer isso, não pergunte novamente e é por isso que o cliente não deve 't.
Quanto a PUT
vs. POST
... POST
deve ser usado para criar uma nova instância de um recurso quando o usuário não tem meios ou não deve criar um identificador para o recurso. PUT
é usado quando a identidade do recurso é conhecida.
...
A diferença fundamental entre as solicitações POST e PUT é refletida no significado diferente do Request-URI. O URI em uma solicitação POST identifica o recurso que manipulará a entidade fechada. Esse recurso pode ser um processo de aceitação de dados, um gateway para outro protocolo ou uma entidade separada que aceita anotações. Por outro lado, o URI em uma solicitação PUT identifica a entidade incluída na solicitação - o agente do usuário sabe qual URI se destina e o servidor NÃO DEVE tentar aplicar a solicitação a algum outro recurso. Se o servidor desejar que a solicitação seja aplicada a um URI diferente,
DEVE enviar uma resposta 301 (movida permanentemente); o agente do usuário PODE então tomar sua própria decisão quanto a redirecionar ou não a solicitação.