POST / Redirect / GET dengan pengiriman formulir tidak valid?

11

Di bidang pengembangan web, apakah praktik yang baik untuk melakukan POST / Redirect / GET ketika bidang dalam pengiriman formulir tidak valid, juga?

Biasanya, tidak ada transaksi sensitif yang akan terjadi, dalam acara ini. Namun, dapatkah argumen dibuat bahwa, bagaimanapun, masih merupakan praktik yang baik untuk menggunakan pola POST / Redirect / GET?

Dabbler yang Layak
sumber

Jawaban:

10

Dari perspektif REST, percakapan web harus seperti ini

DAPATKAN / contoh

200 OK - berisi HTML formulir kosong

Pengguna mengisi formulir

POST / contoh

formfield1 = ok

formfield2 = buruk

400 BAD REQUEST - berisi formulir HTML yang diisi dengan kesalahan

Pengguna mengidentifikasi masalah dengan pengiriman formulir dan memperbaikinya

POST / contoh

formfield1 = ok

formfield2 = diperbaiki

201 CREATED - berisi HTML dengan pesan sukses dan tautan selanjutnya (juga Header lokasi untuk klien REST) ​​atau 200 OK dan 204 TIDAK ADA KONTEN yang dapat diterima

Tidak perlu memperkenalkan redirect, dan itu akan mematahkan semantik percakapan untuk melakukannya.

Gary Rowe
sumber
1
O wow, ya, bagaimana mungkin saya lupa tentang REST, atau hanya kode status HTTP yang berbeda secara umum. Saya punya otak kentut ketika mengajukan pertanyaan ini. Terima kasih!
Decent Dabbler
1
Pengalihan dalam pola PRG, meskipun, ada karena pengakuan bahwa mempertahankan "semantik percakapan" kurang penting daripada mencegah pengguna kikir dari menumbuk F5 dan mengabaikan peringatan "yang akan mengirimkan kembali formulir .." peringatan dari browser mereka.
Carson63000
Cukup adil, itulah sebabnya saya menyebutkan perspektif REST.
Gary Rowe
5

Saya akan mengatakan secara umum tidak, dengan alasan bahwa ketika suatu formulir diposkan dengan bidang yang tidak valid, apa yang biasanya ingin Anda layani dalam respons adalah bentuk yang sama dengan populasi bidang yang sama, ditambah beberapa pesan kesalahan. Ini akan sulit dilakukan melalui POST / Redirect / GET - bagaimana Anda memastikan bahwa halaman yang dikembalikan oleh GET sudah memiliki entri pengguna di bidang formulir?

Carson63000
sumber
2
Dengan menyimpan sementara hasil dalam satu sesi (selama satu permintaan tindak lanjut)?
Decent Dabbler
2
@fireeyedboy: ya, itu akan melakukannya .. sepertinya sedikit omong kosong.
Carson63000