POST / Redirect / GET z nieprawidłowym przesłaniem formularza?

11

Czy w dziedzinie tworzenia stron internetowych dobrą praktyką jest wykonywanie POST / Redirect / GET, gdy pola w formularzu są również nieprawidłowe?

Zazwyczaj w tym przypadku nie miałaby miejsca żadna wrażliwa transakcja. Czy można jednak argumentować, że mimo to nadal dobrą praktyką jest stosowanie wzorca POST / Redirect / GET?

Przyzwoity Dabbler
źródło

Odpowiedzi:

10

Z perspektywy REST konwersacja internetowa powinna przebiegać w ten sposób

GET / przykład

200 OK - zawiera pusty formularz HTML

Użytkownik wypełnia formularz

POST / przykład

formfield1 = ok

formfield2 = zły

400 ZŁE WNIOSEK - zawiera wypełniony formularz HTML z błędami

Użytkownik identyfikuje problem ze złożeniem formularza i rozwiązuje go

POST / przykład

formfield1 = ok

formfield2 = naprawiony

201 TWORZONY - zawiera HTML z komunikatem o sukcesie i dalszymi linkami (także nagłówek lokalizacji dla klientów REST) ​​lub 200 OK i 204 BRAK TREŚCI są akceptowane

Nie ma potrzeby wprowadzania przekierowania, a to przerwałoby semantykę konwersacji.

Gary Rowe
źródło
1
O wow, tak, jak mogłem zapomnieć o REST lub ogólnie o różnych kodach stanu HTTP. Miałem pierdnięcie mózgu, gdy zadałem to pytanie. Dzięki!
Przyzwoity Dabbler
1
Przekierowanie we wzorcu PRG wynika jednak z faktu, że utrzymanie „semantyki konwersacji” jest mniej ważne niż zapobieganie zacieraniu F5 przez użytkowników z szynką i ignorowanie ostrzeżenia „który prześle formularz ponownie”. ich przeglądarka.
Carson63000,
W porządku, dlatego wspomniałem o perspektywie REST.
Gary Rowe,
5

Powiedziałbym ogólnie, że nie, ze względu na to, że gdy formularz jest wysyłany z niepoprawnymi polami, to co zwykle chcesz podać w odpowiedzi, to ten sam formularz z tą samą populacją pól, a także niektóre komunikaty o błędach. Byłoby to uciążliwe, aby wykonać za pomocą POST / Redirect / GET - w jaki sposób upewniłbyś się, że strona zwrócona przez GET ma już wpisy użytkownika w polach formularza?

Carson63000
źródło
2
Przez tymczasowe zapisanie wyniku w sesji (na czas jednego żądania uzupełniającego)?
Przyzwoity Dabbler
2
@fireeyedboy: tak, to by to zrobiło ... wydaje się trochę kłopotliwe.
Carson63000,