Questo sembra essere il principale REST che ho avuto il tempo più difficile che mi avvolge la testa. Capisco che quando si designa una pausa la maggior parte dello sforzo dovrebbe andare a progettare/descrivere l'ipertesto per l'applicazione.Qualsiasi puntatore alle applicazioni del mondo reale di questo principale? Come si applica il protocollo atom questo principio? Qualcuno può spiegare che, in termini semplici, come si applicherebbe a un ipotetico carrello di riposo.Qualcuno può spiegare "Hypertext come motore dello stato dell'applicazione" in termini semplici
risposta
Considera di navigare su un normale sito web. Quando visiti, leggi i contenuti delle pagine e, in base a ciò che hai letto e ciò che vuoi fare, segui vari link sulla pagina. Questo è davvero il nucleo di ciò che "l'ipertesto come motore dello stato dell'applicazione" si riduce a. In questo esempio, lo stato dell'applicazione è lo stato nella tua testa e nella pagina in cui ti trovi. Sulla base di ciò, si attraversano ulteriori collegamenti, che alterano lo stato dell'applicazione nella propria testa. C'è un altro elemento, mente: l'altro lato è che non dovresti aver bisogno di indovinare quegli URI: ci dovrebbe essere abbastanza contesto nella pagina per dedurre gli URI (come le informazioni che l'applicazione avrebbe devono avere il tipo di contenuto e cose come il modello URI) o dovrebbero essere presenti gli URI da seguire. Oltre a ciò, un'applicazione HTTP RESTful non dovrebbe preoccuparsi della struttura degli URI.
AGGIORNAMENTO: Per espandere le cose, i moduli HTML dimostrano anche HATEOAS. I moduli che utilizzano GET sono analoghi all'uso di modelli URI. E HATEOS non si limita semplicemente al passaggio dei link usando HTTP GET: i moduli che usano il POST (o qualche altro metodo, se il browser semplicemente lo supporta) possono rappresentare una descrizione da inviare al server.
Questo articolo fornisce alcuni campioni nel contesto di Flickr.
Flickr non è RESTful. Stanno mentendo. Fielding stesso, il creatore di REST, afferma che Flickr non ha idea di cosa stiano facendo. – aehlke
Un altro modo per osservare questo concetto è che lo stato è rappresentato dalla pagina corrente e dai collegamenti incorporati. Attraversare un collegamento cambia lo stato dell'applicazione che è rappresentata dalla pagina successiva. È un po 'difficile da spiegare ... i collegamenti disponibili in qualsiasi momento definiscono quali azioni sono disponibili in base alle azioni che sono già avvenute. Questa è una definizione di "lo stato attuale".
Il trucco è quello di rappresentare le azioni disponibili sono gli URI che "agiscono" su una risorsa. Il recupero della rappresentazione associata a un URI esegue implicitamente l'azione e recupera la rappresentazione risultante. Gli URI sono incorporati nella rappresentazione e l'utente comprende l'azione associata a un URI specifico. I vari metodi HTTP aiutano a definire le "azioni" che si verificano e specifica quando nessuna azione è consentita. Questo è di solito ciò a cui le persone arrivano quando descrivono l'intero paradigma RESTful.
Non penso che sia abbastanza preciso. Ad es. HTTP, le sole "azioni" che puoi fare sono GET, POST, PUT e DELETE. In REST, non si rappresentano le azioni disponibili come URI, si espongono le risorse tramite URI e si consente a GET, POST, PUT e DELETE. –
L'utilizzo dei verbi HTTP correttamente non è REST. Sta semplicemente usando HTTP correttamente. – aehlke
Quando si tenta di spiegare l'ipermedia, mi piace utilizzare l'esempio della navigazione in un'auto tramite i cartelli rispetto a una mappa. Mi rendo conto che non risponde direttamente alla tua domanda ma potrebbe essere d'aiuto.
Quando si guida un'auto e si raggiunge un particolare incrocio, vengono fornite indicazioni per indicare dove si può andare da quel punto. Allo stesso modo, hypermedia ti offre un insieme di opzioni basate sul tuo stato attuale.
Un'API tradizionale basata su RPC è più simile a una mappa. Con una mappa si tende a pianificare il percorso in base a un set statico di dati stradali. Un problema con le mappe è che possono diventare obsolete e non forniscono informazioni sul traffico o altri fattori dinamici.
Il vantaggio dei pannelli è che possono essere modificati al volo per deviare il traffico a causa di lavori di costruzione o per controllare il flusso del traffico.
Non sto suggerendo che le indicazioni sono sempre un'opzione migliore di una mappa. Ovviamente ci sono pro e contro ma è importante essere consapevoli di entrambe le opzioni. È lo stesso con hypermedia. È una valida alternativa alla tradizionale interfaccia RPC.
Esattamente. Credo che avrei dovuto spiegarlo. –
Un piccolo chiarimento: "un insieme di opzioni basate sullo stato corrente" dovrebbe probabilmente essere "un insieme di opzioni basate sullo stato della risorsa", poiché il client non dovrebbe avere lo stato. Con la tua analogia, la tua posizione attuale è la risorsa. –
Ok, quindi, in base a ciò che stai dicendo, gli schemi dei modelli di url sono malvagi e l'applicazione dovrebbe fornire le prossime opzioni tramite schemi come i tag . Come si dice un supporto per carrello della spesa (ad esempio xml), è possibile pagare con la carta di credito. Qualche esempio in tal senso? Grazie per la risposta. – Surya
Gli schemi di template URI sono malvagi se l'applicazione deve avere una conoscenza preliminare di essi, cioè se sono codificati nell'applicazione client. OpenSearch è un buon esempio di come utilizzare correttamente i modelli di URI. Ma se il client se fissato sugli URI guardando in un certo modo, non è REST. –
No, se il client utilizza i modelli URI che ha acquisito dal server, questa è una storia diversa, da qui il mio esempio di OpenSearch. Il server sta dicendo al cliente come costruire URI lì e poi piuttosto che il client, a seconda della conoscenza out-of-band a priori. –