Ho consentito la sostituzione all'ingrosso di una collezione, ad esempio PUT ~/people/123/shoes
dove il corpo è l'intera rappresentazione della collezione.
Questo funziona per piccole raccolte figlio di elementi in cui il client desidera rivedere gli elementi ed eliminarne alcuni e aggiungerne altri e quindi aggiornare il server. Potrebbero Mettere una raccolta vuota per eliminarli tutti.
Ciò significherebbe che GET ~/people/123/shoes/9
rimarrebbe ancora nella cache anche se un PUT lo ha eliminato, ma questo è solo un problema di cache e sarebbe un problema se qualcun altro eliminasse la scarpa.
Le mie API di dati / sistemi utilizzano sempre ETag al contrario dei tempi di scadenza, quindi il server viene colpito a ogni richiesta e ho bisogno di intestazioni di versione / concorrenza corrette per modificare i dati. Per le API di sola lettura e allineate a visualizzazione / rapporto, utilizzo i tempi di scadenza per ridurre gli hit all'origine, ad esempio una classifica può essere valida per 10 minuti.
Per raccolte molto più grandi, ad esempio ~/people
, tendo a non aver bisogno di più eliminazioni, il caso d'uso tende a non sorgere naturalmente e quindi ELIMINA singola funziona bene.
In futuro, e dall'esperienza con la creazione di API REST e con gli stessi problemi e requisiti, come l'audit, sarei propenso a utilizzare solo i verbi GET e POST e progettare attorno agli eventi, ad esempio POST un evento di cambio di indirizzo, anche se sospetto che arriverà con la sua serie di problemi :)
Consentirei inoltre agli sviluppatori front-end di creare le proprie API che utilizzano API back-end più rigide poiché spesso ci sono ragioni pratiche e valide sul lato client per cui non amano i rigidi progetti di API REST "fanatici del campo" e per la produttività e motivi di stratificazione della cache.