2011-01-05 13 views
15

A cosa si riferisce il trasferimento di stato in stato di trasferimento di stato?Che cosa si intende per "trasferimento di stato" in Representational State Transfer (REST)?

Trovato alcune spiegazioni su questo (ad esempio here) ma non riesco ancora a capire. Per esempio in questo articolo si dice

La rappresentazione pone l'applicazione client in uno stato.

Perché? Che cosa ha lo stato (come ho capito, qualcosa come una sessione) ha a che fare con una rappresentazione di una risorsa?

+0

vedere questa risposta al link http://stackoverflow.com/a/37659395/3762855 –

+0

Prova anche la risposta a questo link: https://stackoverflow.com/a/37683965/3762855 –

risposta

15

Perché? Che cosa ha lo stato (come ho capito, qualcosa come una sessione) ha a che fare con una rappresentazione di una risorsa?

Un oggetto ha attributi (o stato) e comportamenti (o metodi).

Se voglio spostare un oggetto da mio desktop a un server che devo fare la seguente:

  1. creare una rappresentazione dello stato dell'oggetto.

  2. Trasferire quella rappresentazione dal desktop al server.

I metodi che non trasferisco. Installa la stessa definizione di classe su entrambe le macchine.

Quindi, REST consiste nel creare una rappresentazione dello stato corrente dell'oggetto in modo che possa essere trasferito su un altro server da cui l'oggetto può essere ricostruito.

Inviamo solo lo stato - gli attributi - dell'oggetto. E dobbiamo creare una rappresentazione serializzata esterna di quello stato.

+0

@ S. Lott: E il comportamento? REST parla anche di questo o il comportamento non è qualcosa di interessante per la risorsa? – user2011

+2

Nonostante ciò, Sound Transfer non è affatto uguale alla serializzazione dell'oggetto. –

+0

@Darrel Miller: corretto. È solo un pezzo del puzzle. –

10

Considerare un'applicazione client come una sorta di macchina a stati giganti. Lo stato iniziale del client è uguale alla prima rappresentazione restituita dal server. I collegamenti nella rappresentazione restituita forniscono possibili "transizioni di stato".

Si pensi che esistono due tipi principali di collegamenti, passivi e attivi. I collegamenti passivi come <img> e <link rel="stylesheet"> non provocano effettivamente una transizione di stato, ma semplicemente aumentano lo stato corrente. Collegamenti come <form> e <a> tuttavia sono collegamenti attivi e la causa di una transizione di stato. Dopo aver seguito uno di questi collegamenti, il nuovo stato client è uguale alla rappresentazione restituita, ovvero trasferimento di stato .

Se sei abituato a creare applicazioni client desktop tradizionali, troverai che questa è un'architettura radicalmente diversa. Non uno che è probabile che tu suoni durante la notte. Inizialmente questo approccio può sembrare molto limitante, ma se si considera che un'applicazione client può essere l'host di molte macchine a stati di esecuzione simultanea, si inizierà a capire che si può fare tutto ciò che si può usare usando un'architettura di oggetti remota e mantenere comunque le cose libere accoppiamento del browser web.

+1

Il trasferimento equivale alla transizione? Posso pensare che ST (trasferimento) significhi trasferire ogni volta lo stato del client invece di memorizzarlo in un macine locale? – Jaskey

+1

@Jaskey La transizione è l'effetto di un trasferimento. Potresti trasferire lo stato del client al server e/o trasferire lo stato della risorsa dal server al client. –

+0

Quindi, un'altra domanda, se uso memcache o db per memorizzare lo stato dell'utente come "è loggato", non è sicuramente un'applicazione REST? Ho visto molti post o video che dobbiamo lasciare che il cliente sia responsabile per il suo stato e nessuno stato verrà memorizzato nel server. Ma molti post hanno dichiarato che, per creare un'applicazione senza stato, possiamo usare db o memcache per memorizzare lo stato, il che mi confonde ora, quindi faccio una domanda http://stackoverflow.com/questions/27016314/does-ststate-transfer -in-riposo-significa-che-stato-deve-essere-tenuto-da-cliente, lo apprezzerò se puoi prendere un minuto per rispondere lì! grazie! – Jaskey

1

Il Web è composto da risorse. Una risorsa è qualsiasi elemento di interesse.Ad esempio, theBoeing Aircraft Corp può definire una risorsa 747. I client possono accedere a tale risorsa con thisURL: la rappresentazione della risorsa viene restituita http://www.boeing.com/aircraft/747A (ad es. Boeing747.html). La rappresentazione posiziona l'applicazione client in uno stato. Il risultato del client che attraversa un collegamento ipertestuale inBoeing747.html è accessibile a un'altra risorsa. La nuova rappresentazione colloca l'applicazione client in un altro stato. Pertanto, l'applicazione client cambia stato (trasferimenti) con ciascuna rappresentazione di risorsa -> Trasferimento stato rappresentazionale!

Problemi correlati