Existe algo não RESTful no fornecimento de parâmetros para uma solicitação HTTP DELETE?
Meu cenário é que estou modelando o "Tem certeza de que deseja excluir isso?" cenário. Em alguns casos, o estado do recurso sugere que a exclusão solicitada pode ser inválida. Você provavelmente pode imaginar alguns cenários em que a confirmação de uma exclusão é necessária
A solução que adotamos é passar um parâmetro para a solicitação de exclusão para indicar que não há problema em prosseguir com a exclusão ("? Force_delete = true")
por exemplo
DELETE http://server/resource/id?force_delete=true
Eu acredito que ainda é tranquilo desde:
(a) A semântica de DELETE não está sendo alterada - o usuário ainda pode enviar uma solicitação DELETE normal, mas isso pode falhar com 409 e o corpo da resposta explica o porquê. Eu digo que pode falhar porque (por razões que não valem a pena explicar) em algumas ocasiões, não há motivos para solicitar ao usuário.
(b) Não há nada na dissertação de Roy que sugira que seja contra o espírito do REST - por que haveria uma vez que o HTTP é apenas uma implementação do REST, por que os parâmetros HTTP passantes são importantes
Alguém pode me indicar uma declaração definitiva que identifique o motivo pelo qual isso não é RESTful?
Em uma pergunta relacionada, se o usuário não especificar force_delete, retornarei 409 Conflict
- esse é o código de resposta mais apropriado?
Acompanhamento
Após algumas pesquisas, acho que adicionar parâmetros ao DELETE pode violar vários princípios.
A primeira é que a implementação possivelmente viola a "Interface Uniforme" (consulte a seção 5.1.5 da dissertação de Roy
Ao adicionar 'force_delete', adicionamos uma restrição adicional ao método DELETE já bem definido. Essa restrição é significativa apenas para nós.
Você também pode argumentar que isso viola o "5.1.2 Client-Server", pois o diálogo de confirmação é realmente uma preocupação da interface do usuário e, novamente, nem todos os clientes desejam confirmar a exclusão.
Sugestões alguém?