Considerare la situazione.Il REST può in pratica essere senza stato?
Sto scrivendo un'app di analisi statistica. L'app ha più livelli.
- Frontend UI scritto per più tipi di dispositivi, desktop del browser, mobile.
- Servlet di livello intermedio che offre un cosiddetto servizio REST a questi frontend.
- Backend che esegue il calcolo estremo dell'elaborazione statistica .
- che comunica con un ulteriore database back-end
dovuto il motivo che l'analisi statistica richiede enormi quantità di potenza di elaborazione, si sarebbe mai sognato di delegare tale trattamento al front-end.
Le analisi statistiche costituito da procedure o una serie di passaggi work-flow.
Alcuni passaggi potrebbero richiedere tanta potenza di elaborazione, non si vorrebbe che li ripeta.
Se ha un flusso di lavoro di 20 passi, non è possibile eseguire il punto 20 senza prima di eseguire il punto 19, che non può essere eseguita senza prima di eseguire il punto 18, così via e così via.
Ci sono punti di osservazione, in modo tale che, per esempio, lo statistico deve ispezionare risultati delle fasi 3, 7, 9, 14, 19 prima dice di lato client per procedere al passo successivo.
Ciascuno di questi passaggi sono un cosiddetto richiesta al servizio REST, per dire il supercomputer back-end per impostare progressivamente il modello statistico in memoria.
Ci sono molti flussi di lavoro. Alcuni flussi di lavoro possono incidentalmente condividere i risultati del passaggio . ad es. Flusso [secco]: il passaggio [7] può condividere Flusso [bagnato]: Passaggio [10]. A causa di per la quantità di elaborazione coinvolta, abbiamo assolutamente impedito ripetendo un passaggio che potrebbe già essere stato compiuto da un altro flusso.
Pertanto, si può vedere che nel cosiddetto servizio REST in fase di progettazione, non è possibile che ogni richiesta sia indipendente da qualsiasi richiesta precedente.
Pertanto, quanto può essere vera la seguente affermazione?
Tutte le interazioni REST sono senza stato. Cioè, ogni richiesta contiene tutte le informazioni necessarie per un connettore per comprendere la richiesta , indipendentemente da eventuali richieste che potrebbero averlo preceduto.
Ovviamente, l'applicazione che ho descritto richiede che la richiesta dipenda dalla richiesta precedente. Ci sono tre possibilità che posso vedere riguardo questa app.
- La mia app non è conforme a REST, poiché non è in grado di soddisfare le richieste stateless. Può usare il framework JAX-RS, ma usare JAX-RS e tutti i crear di REST non lo rende REST, semplicemente perché fallisce il criterio stateless.
- La mia app è progettata male - dovrei ignorare il tentativo di evitare i costi temporali e finanziari reimballando un modello statistico anche se ci sono voluti 5 - 15 minuti per un flusso di lavoro. Assicurati solo che non ci sia dipendenza dalle richieste precedenti. Ripeti i passaggi costosi quando necessario.
- I criteri di apolidi sono obsoleti. La mia comprensione del REST è obsoleta/difettosa in quanto la comunità REST ha costantemente ignorato questo criterio.
La mia app è considerata RESTful?
nuova domanda: ISO 9000
Infine, nel caso in cui la mia applicazione non è completamente considerato riposante, avrebbe tutti i riferimenti a "riposo" deve essere omesso per passare la certificazione ISO 9000?
nuovo edit:
REST-in-pezzo
OK, il mio collega ed io abbiamo discusso di questo e ha deciso di chiamare ad un'architettura/modello REST-in-pezzo = REST a tappe graduali .
qual è la tua definizione di "stato"? –
Dmitry - esattamente la mia domanda. Dobbiamo chiedere ai guru che definiscono REST. –
un database contiene lo stato ma ci sono un sacco di applicazioni web supportate da database considerate RESTful. Cosa succede se il database o parte di esso è in memoria? Fondamentalmente, credo che lo "stato" che l'architettura ReST non dovrebbe mantenere sia uno stato di sessione (volatile), non lo stato dell'applicazione (business). –