Quindi, un servizio RESTful ha un set fisso di verbi nel suo vocabolario. Un servizio Web RESTful prende questi dai metodi HTTP. Ci sono alcuni presunti vantaggi nel definire un vocabolario fisso, ma non capisco davvero il punto. Forse qualcuno può spiegarlo.
Perché un vocabolario fisso come definito da REST è meglio che definire in modo dinamico un vocabolario per ogni stato? Ad esempio, la programmazione orientata agli oggetti è un paradigma popolare. RPC è descritto per definire interfacce fisse, ma non so perché la gente presuma che RPC sia limitato da questi contrappunti. Potremmo specificare dinamicamente l'interfaccia proprio come un servizio RESTful descrive dinamicamente la sua struttura di contenuto.
REST dovrebbe essere vantaggioso in quanto può crescere senza estendere il vocabolario. I servizi RESTful crescono in modo dinamico aggiungendo più risorse. Cosa c'è di così sbagliato nell'estensione di un servizio specificando dinamicamente un vocabolario per oggetto? Perché non utilizziamo semplicemente i metodi definiti sui nostri oggetti come vocabolario e i nostri servizi descrivono al cliente quali sono questi metodi e se hanno o meno effetti collaterali?
Fondamentalmente ho la sensazione che la descrizione di una struttura di risorse lato server sia equivalente alla definizione di un vocabolario, ma siamo quindi costretti a usare il vocabolario limitato in cui interagire con queste risorse.
Un vocabolario fisso disaccoppia davvero le preoccupazioni del client dalle preoccupazioni del server? Devo sicuramente preoccuparmi di alcune configurazioni del server, questa è normalmente la posizione delle risorse nei servizi RESTful. Reclamare l'uso di un vocabolario dinamico sembra ingiusto perché dobbiamo comunque ragionare dinamicamente su come comprendere questa configurazione in qualche modo. Un servizio RESTful descrive le transizioni che è possibile effettuare identificando la struttura degli oggetti tramite hypermedia.
Non capisco cosa rende un vocabolario fisso migliore di qualsiasi altro vocabolario dinamico che si autodescrive, che potrebbe facilmente funzionare molto bene in un servizio simile a RPC. È solo uno scarso ragionamento per il vocabolario limitante del protocollo HTTP?
Riflessione
Solo per chiarire i miei pensieri un po 'meglio di quanto abbia fatto. Supponiamo che tu stia progettando qualsiasi API per scopi generali, forse nemmeno sul web. Saresti felice se qualcuno dicesse che puoi usare questi nomi di metodo solo sui tuoi oggetti? REST non è limitato a HTTP, ma considera la situazione in cui ogni API che scrivi, che si affaccia sul web o in altro modo consisteva semplicemente in oggetti contenenti i metodi GET POST PUT e DELETE. Quindi quel metodo object.foo che volevi definire non è possibile. Devi definire un nuovo oggetto chiamato foo e chiamarne il metodo GET. Questo è essenzialmente il modo in cui funziona REST e mi rende un po 'a disagio a pensarci. Non hai una migliore comprensione generica di ciò che fa foo, sei stato solo costretto a creare un nuovo oggetto per quello che è essenzialmente un metodo su un oggetto genitore. Inoltre la tua API non è meno complessa, hai appena nascosto la complessità dell'interfaccia creando più oggetti. I servizi Web RESTful ci obbligano ad adottare un'interfaccia che può o non può essere sufficiente nel contesto dell'API che stiamo esponendo. Forse c'è una buona ragione per farlo con le API web, ma una buona ragione per non adottare interfacce standard per ogni oggetto in ogni API di uso generale. Un esempio pratico sarebbe apprezzato.