Come gestire lo stato in RIPOSO

Credo che questa domanda vi suona familiare, ma io sono ancora un altro programmatore sconcertati dal RESTO.

Ho un’applicazione web tradizionale che va da StateA per StateB e così via.
Se l’utente va su (URL) StateB, voglio fare in modo che egli ha visitato StateA prima.
Tradizionalmente, lo faccio usando lo stato della sessione.

Dal momento che la sessione non è ammesso nel RESTO, come posso realizzare questo?

  • utilizzare @Stateful in classe.
InformationsquelleAutor user317050 | 2010-04-15

 

One Reply
  1. 50

    Ci sono 2 risposte a questo, a seconda di che cosa in particolare si sta cercando di fare.

    Se siete veramente cercando di gestire la richiesta di base dello stato (ad esempio quando un utente sta lavorando attraverso un multi-schermo guidata o alcuni altri di navigazione basato su un flusso di lavoro), poi il RESTO la risposta è che lo stato, che dovrebbe essere inviato avanti e indietro con ogni richiesta/risposta (utilizzando qualcosa di simile a un campo di testo nascosto, una stringa di query, o inviare i dati memorizzati in un modulo). Questa è un’implementazione di Martin Fowler “Stato Cliente” design pattern (dettagliate in pieno nel suo libro, Modelli di Enterprise Application Architecture; vedere qui per un riferimento).

    Se, invece, il tentativo di gestire una sorta di nuovo oggetto sul server–come un carrello della spesa … poi il RESTO la risposta è che in realtà si sta creando una nuova entità che può essere utilizzato come qualsiasi altro da un URL diretto. O se non si store di questa nuova entità in un database o in memoria dell’applicazione (come un tradizionale oggetto di Sessione) è, ma, in entrambi i casi, il nuovo oggetto si parla di “stato” sul server e la creazione di una nuova entità per l’utente di interagire con.

    • Solo un punto supplementare. Se si prende il “nuovo oggetto sul server” approccio, quindi, che dovrebbe essere trattata come una prima classe di risorsa e dovrebbe avere una funzione di identificazione url.
    • Cercando di capire il RESTO di me… sono curioso: è il “primo della classe”, un termine tecnico in questo contesto?
    • Non so che direi che è un “termine tecnico” –e certamente non è specifico per il RESTO-ma è comunemente usato per descrivere qualsiasi core “oggetto” di una particolare tecnologia, linguaggio di programmazione, ecc…. e connotates che il “primo della classe” oggetto si ottiene speciale trattamento di questa tecnologia.
    • Per esempi: (1) la Gente dice che le funzioni sono di “prima classe” cittadini in JavaScript, perché sono più solo i sottoprogrammi; in realtà, sono “oggetti” a se stessi ” (2) F# (un nuovo linguaggio di programmazione di Microsoft) è stata descritta come un “cittadino di prima classe” di Visual Studio, il che significa che è completamente supportato linguaggio di programmazione IDE (3) In Java 1.5 e versioni successive, Le enumerazioni sono considerati “di prima classe cittadini”, perché in realtà sono supportati come un dedicato, specifico costrutto del linguaggio; prima di Java 1.5, non c’era Java “enum” la struttura.
    • Miller penso dogmatica RESTO avrebbe anche richiesto la Url per il multi-pagina della procedura guidata. Di avviare la procedura guidata di creazione di una nuova risorsa, con una nuova risorsa creata per ogni pagina, la risposta di ciascuno compreso un collegamento “avanti”. Si potrebbe imporre un vincolo che tutti la pagina “risorse” doveva essere creato prima di “l’ultima risorsa”; questo potrebbe essere fatto in modo implicito, con gli Url come 1/2/3/submit. Questo sembra un po ‘ stupido, perché è ricreare lo stato della sessione, basta con gli Url. Un vantaggio è che la sessione non riusciva a tempo se gli Url sono i permalink. Si potrebbe segnalibro per completare in seguito.
    • Interessante punto di vista. Dove è la linea di confine tra “stato” (per essere trasferito avanti e indietro) e “risorsa” (l’assegnazione di un URI)? È in questa “concretezza”, come “un mucchio di info di navigazione è uno stato, ma qualcosa che assomiglia più a un’entità o di un contenitore o di un oggetto è una risorsa”? O è più sulla vita di un tempo? o scopo?
    • Vale la pena notare che la P di EAA Client di Stato ha svantaggi: “se il cliente non tutto è perduto, […] con grandi quantità di dati i problemi di dove memorizzare i dati e il costo del trasferimento di tutto con ogni richiesta diventa proibitivo, […] tutti i dati inviati al client è vulnerabile a essere guardato e alterato, […] non dare per scontato che quello che ha mandato fuori è la stessa cosa di ciò che viene inviato indietro. Eventuali dati in arrivo avrà bisogno di essere completamente rinnovata.”
    • Una cosa che sembra distinguere questi due (a me, comunque) è la durata della sessione. Che è, se un cliente non riesce (o uscire), che cosa sarebbe accettabile perdere? Ciò che è perso sarebbe stato dell’applicazione. Qualsiasi cosa che si desidera tenere nel caso in cui il client non riesce (o non si disconnette) dovrebbero essere salvati in risorse. Amazon carrello è un esempio.
    • Punto di interesse: Amazzoni Carrello è un permamente risorsa che è sempre esistente, in qualche modo, anche non autenticate di navigazione di stato. Si può anche prendere con voi in autenticata di stato. — In alcuni scenari abituali c’è il concetto di un “non ancora completo” ressource che dovrebbe “non ancora” essere mantenuta a causa di problemi di convalida. (Amazzoni Carrello è sempre valida a causa di operazioni disponibili, in modo che sia un semplice caso di particolare complessità ufficiale i moduli di domanda non sono semplici da gestire.)
    • Ma in un periodo di RIPOSO di applicazione di tali risorse deve essere mantenuta in ogni caso, giusto per avere l’accessibilità come risorsa-non solo sono ancora membro del “validato folla”. Fino ad ora mi avrebbe modellato tali cose come parte dello stato della sessione, ma comunque se sono trattati come “primo della classe risorse, solo che non è ancora pienamente valido”, lo stato della sessione può essere ridotta a stato di esplorazione, tra cui Id di attualmente coinvolti risorse. Questo può aiutare sia il trasferimento di volume di dati. Come qualsiasi altra risorsa, che “non è ancora valido risorse” possono essere assegnate condizioni di vita, come “gc-ed dopo X h/d/w/m”.
    • Queste risorse, tuttavia, deve essere memorizzata in una memoria permanente di farli in modo trasparente a portata di mano anche in caso di disaster recovery — o che non sono di prima classe e di risorse.

Lascia un commento