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 nella definizione di un vocabolario fisso, ma in realtà non capisco il punto. Forse qualcuno può spiegarlo.
Perché è un vocabolario fisso come descritto da REST meglio di definire dinamicamente 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 supponga che RPC sia limitato da questi punti di contatto. Potremmo specificare dinamicamente l'interfaccia proprio come un servizio RESTful descrive dinamicamente la sua struttura del contenuto.
Il 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'estendere un servizio specificando in modo dinamico un vocabolario per oggetto? Perché non usiamo solo i metodi definiti nei nostri oggetti come vocabolario e i nostri servizi descrivono al cliente quali sono questi metodi e se hanno o meno effetti collaterali?
In sostanza 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 realmente le preoccupazioni del cliente dalle preoccupazioni del server? Sicuramente devo occuparmi di alcune configurazioni del server, questa è normalmente la posizione delle risorse nei servizi RESTful. Contrastare l'uso di un vocabolario dinamico sembra ingiusto perché dobbiamo in qualche modo ragionare in modo dinamico come capire in qualche modo questa configurazione. Un servizio RESTful descrive le transizioni che sei in grado di fare identificando la struttura dell'oggetto tramite hypermedia.
Semplicemente non capisco cosa rende un vocabolario fisso migliore di qualsiasi vocabolario dinamico che si descrive da sé, che potrebbe facilmente funzionare molto bene in un servizio simile a RPC. Questo è solo un pessimo ragionamento per il vocabolario limitante del protocollo HTTP?
riflessione
Solo per chiarire i miei pensieri un po 'meglio di quello che ho fatto. Supponiamo che tu stia progettando qualsiasi API generica, forse nemmeno con il web. Saresti felice se qualcuno dicesse che puoi usare solo questi nomi di metodo sui tuoi oggetti? REST non è limitato a HTTP, ma considera la situazione in cui ogni API che scrivi, rivolta verso il Web o altrimenti semplicemente consisteva in oggetti contenenti metodi GET POST PUT e DELETE. Quindi quel metodo object.foo che volevi definire non è possibile. Devi definire un nuovo oggetto chiamato foo e chiamare il suo metodo GET. Questo è essenzialmente il modo in cui funziona REST, e mi fa un po 'a disagio pensarci. Non hai una migliore comprensione generica di cosa 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 solo una complessità dell'interfaccia nascosta creando più oggetti. I servizi web RESTful ci costringono 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 facing, ma una buona ragione per non adottare le interfacce standard per ogni oggetto in ogni API generica. Un esempio pratico sarebbe apprezzato.