Tre Passo BuyOnline Il modo RESTful
-
19-09-2019 - |
Domanda
Stiamo ri-sviluppando il nostro funzionalità BuyOnline e lo stiamo facendo nel modo RESTful.
Il processo è un tre passo uno e il cliente viene chiesto di inserire i dati ad ogni passo.
Diciamo che i tre URL sono;
/step1.aspx
/step2.aspx
/step3.aspx
Ogni passo è abbastanza autonomo e non richiede i dati da uno qualsiasi degli altri passaggi.
La domanda è: come faccio a fermare i clienti a navigare direttamente a STEP2 w / out primo completando i dettagli in step1 dato ogni passo non sa nulla del passaggio precedente?
So che posso aggiungere una proprietà al mio modello di oggetti che mi dice che passo è stato l'ultimo, ecc, ma non che genere di rompere l'intero principio REST?
Anche io non voglio controllare il mio modello come se i dettagli in un passaggio precedente sono state fileld in causa ancora una volta che viola i principi REST.
Penso che sto lentamente rassegnarmi a un concetto che ho bisogno (qualcosa) a dirmi dove sono stato, ma io non voglio questo.
Nel caso / Può il controllore forse rilevare che la storia non contiene il passaggio precedente ponendo il controllo di nuovo a dove penso che dovrebbe essere?
Soluzione
REST dovrebbero rappresentare entità . per esempio. libri / ordini / foto ecc.
Credo che la confusione di cui sopra è che si sta cercando di rappresentare una prenotazione sequenza in termini REST come entità, e (ovviamente) non lo sono. Così gli oggetti che i clienti possono scegliere, i loro ordini, ecc possono essere utilmente rappresentati in questo modo. Altri elementi del processo non dovrebbe essere.
Si può sostenere che la fase 1 rappresenta un indirizzo (per amor di discussione). Ma POSTing un oggetto indirizzo è distinto da immettere i dati in una forma e permettendo la navigazione a / da pagine correlate. Tale operazione ha una sequenza o flusso ad esso, ed è concettualmente più ricco semplicemente POSTing / Geting / deleteing un indirizzo. Hai Illustrato questo sostenendo che si desidera evitare che qualcuno completato il passaggio 2 senza aver completato la fase 1, ecc.
Altri suggerimenti
Quando si passa da step1.asx a step2.asx, passare un parametro query che contiene qualche chiave che indica al server che step1 è stata visitata. Ad esempio, step1.asx ha a href per step2.asx? Qualunque = a92jv29.
Il "a92jv29" può essere, per esempio, timestamp criptato dal server. Si può facilmente verificare che sia valido (non scaduto e non dal futuro) nel lato server. Non c'è bisogno di memorizzare lo stato.
Il tuo URL potrebbe avere nomi migliori, dovrebbe come "terms.aspx", "registration.aspx", o qualsiasi altra cosa, ma che è strettamente non è necessario.