POST / Redirect / GET con invio modulo non valido?


Risposte:


10

Dal punto di vista REST la conversazione sul web dovrebbe andare così

OTTIENI / esempio

200 OK - contiene HTML vuoto

L'utente compila il modulo

POST / esempio

formfield1 = ok

formfield2 = cattivo

400 BAD REQUEST - contiene HTML in forma popolata con errori

L'utente identifica il problema con l'invio del modulo e lo risolve

POST / esempio

formfield1 = ok

formfield2 = fisso

201 CREATO - contiene HTML con messaggio di successo e collegamenti successivi (anche intestazione di posizione per client REST) ​​o 200 OK e 204 NO CONTENT sono accettabili

Non è necessario introdurre un reindirizzamento e infrangerebbe la semantica della conversazione.


1
O wow, sì, come avrei potuto dimenticare REST, o semplicemente diversi codici di stato HTTP in generale. Ho avuto una scoreggia al cervello quando ho posto questa domanda. Grazie!
Dabbler decente,

1
Il reindirizzamento nel modello PRG, tuttavia, è dovuto all'ammissione che mantenere la "semantica della conversazione" è meno importante che impedire agli utenti con il pugno di ferro di schiacciare F5 e ignorare l'avvertenza "che reinvia il modulo .." da il loro browser.
Carson63000,

Abbastanza giusto, motivo per cui ho citato la prospettiva REST.
Gary Rowe,

5

Direi di no, in base al fatto che quando un modulo è POSTATO con campi non validi, ciò che normalmente si desidera pubblicare in risposta è lo stesso modulo con la stessa popolazione di campi, oltre ad alcuni messaggi di errore. Ciò sarebbe oneroso da eseguire tramite POST / Redirect / GET: come assicureresti che la pagina restituita dal GET avesse già le voci dell'utente nei campi del modulo?


2
Memorizzando temporaneamente il risultato in una sessione (per la durata di una richiesta di follow-up)?
Dabbler decente il

2
@fireeyedboy: sì, quello lo farebbe .. sembra un po 'un kludge però.
Carson63000,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.