Y a-t-il quelque chose de non-RESTful à propos de la fourniture de paramètres à une requête HTTP DELETE?
Mon scénario est que je modélise le "Êtes-vous sûr de vouloir supprimer cela?" scénario. Dans certains cas, l'état de la ressource suggère que la suppression demandée peut être invalide. Vous pouvez probablement imaginer vous-même certains scénarios où la confirmation d'une suppression est requise
La solution que nous avons adoptée est de passer un paramètre à la demande de suppression pour indiquer que vous pouvez procéder à la suppression ("? Force_delete = true")
par exemple
DELETE http://server/resource/id?force_delete=true
Je crois que c'est toujours reposant depuis:
(a) La sémantique de DELETE n'est pas modifiée - l'utilisateur peut toujours envoyer une demande DELETE normale mais cela peut échouer avec 409 et le corps de la réponse expliquera pourquoi. Je dis peut échouer parce que (pour des raisons qui ne valent pas la peine d'être expliquées) à certaines occasions, il n'y a aucune raison d'inviter l'utilisateur.
(b) Il n'y a rien dans la thèse de Roy qui suggère que c'est contre l'esprit de REST - pourquoi y en aurait-il puisque HTTP n'est qu'une implémentation de REST alors pourquoi le passage des paramètres HTTP serait-il important?
Quelqu'un peut-il m'indiquer une déclaration définitive qui explique pourquoi ce n'est pas RESTful?
Sur une question connexe, si l'utilisateur ne spécifie pas force_delete, je retourne 409 Conflict
- est-ce le code de réponse le plus approprié?
Suivre
Après quelques recherches supplémentaires, je pense que l'ajout de paramètres à DELETE peut enfreindre plusieurs principes.
La première est que l'implémentation viole peut-être l '«interface uniforme» (voir section 5.1.5 de la thèse de Roy
En ajoutant «force_delete», nous ajoutons une contrainte supplémentaire sur la méthode DELETE déjà bien définie. Cette contrainte n'a de sens que pour nous.
Vous pouvez également affirmer que cela enfreint le "5.1.2 Client-Serveur" car le dialogue de confirmation est vraiment un problème d'interface utilisateur et encore une fois, tous les clients ne voudront pas confirmer la suppression.
Suggestions quelqu'un?