Esiste qualcosa di non RESTful nel fornire parametri a una richiesta DELETE HTTP?
Il mio scenario è che sto modellando "Sei sicuro di volerlo eliminare?" scenario. In alcuni casi, lo stato della risorsa suggerisce che l'eliminazione richiesta potrebbe non essere valida. Probabilmente puoi immaginare alcuni scenari in cui è richiesta la conferma di un'eliminazione
La soluzione che abbiamo adottato è di passare un parametro alla richiesta di eliminazione per indicare che è possibile procedere con l'eliminazione ("? Force_delete = true")
per esempio
DELETE http://server/resource/id?force_delete=true
Credo che sia ancora riposante poiché:
(a) La semantica di DELETE non viene modificata: l'utente può comunque inviare una normale richiesta DELETE, ma ciò potrebbe non riuscire con 409 e il corpo della risposta spiegherà il perché. Dico che potrebbe non funzionare perché (per motivi che non valgono la pena spiegare) in alcune occasioni non vi è alcun motivo per sollecitare l'utente.
(b) Non c'è nulla nella tesi di Roy che suggerisca che è contro lo spirito di REST - perché dovrebbe esserci poiché HTTP è solo un'implementazione di REST, quindi perché il passaggio dei parametri HTTP è importante
Qualcuno può indicarmi un'affermazione definitiva che inchioda il motivo per cui questo non è RESTful?
Su una domanda correlata, se l'utente non specifica force_delete, allora torno 409 Conflict
- è il codice di risposta più appropriato?
Azione supplementare
Dopo alcune ulteriori ricerche, penso che l'aggiunta di parametri a DELETE possa violare diversi principi.
Il primo è che l'implementazione potrebbe violare la "Uniform Interface" (vedere la sezione 5.1.5 della tesi di Roy
Aggiungendo 'force_delete' stiamo aggiungendo un ulteriore vincolo al metodo DELETE già ben definito. Questo vincolo è significativo solo per noi.
Si potrebbe anche sostenere che viola il "5.1.2 Client-Server" poiché il dialogo di conferma è in realtà un problema di interfaccia utente e, di nuovo, non tutti i client vorranno confermare l'eliminazione.
Suggerimenti qualcuno?