POST / Redirect / GET com envio de formulário inválido?

11

No campo do desenvolvimento da web, é uma boa prática executar um POST / Redirect / GET quando os campos em um envio de formulário também são inválidos?

Normalmente, nenhuma transação sensível teria ocorrido, neste evento. No entanto, pode-se argumentar que, no entanto, ainda é uma boa prática utilizar o padrão POST / Redirect / GET?

Dabbler decente
fonte

Respostas:

10

De uma perspectiva REST, a conversa na web deve ser assim

GET / exemplo

200 OK - contém formulário vazio HTML

O usuário preenche o formulário

POST / exemplo

formfield1 = ok

formfield2 = ruim

400 BAD REQUEST - contém HTML de formulário preenchido com erros

O usuário identifica o problema com o envio do formulário e o corrige

POST / exemplo

formfield1 = ok

formfield2 = fixo

201 CREATED - contém HTML com mensagem de sucesso e links posteriores (também cabeçalho de local para clientes REST) ​​ou 200 OK e 204 NO CONTEÚDO são aceitáveis

Não há necessidade de introduzir um redirecionamento, e isso quebraria a semântica da conversa.

Gary Rowe
fonte
1
Uau, sim, como eu poderia ter esquecido o REST ou apenas os diferentes códigos de status HTTP em geral. Eu tive um peido cerebral ao fazer esta pergunta. Obrigado!
Decent Dabbler
1
O redirecionamento no padrão PRG, no entanto, ocorre devido a uma admissão de que a manutenção da "semântica da conversa" é menos importante do que impedir que usuários malucos esmagem o F5 e ignorem o aviso "que reenviará o formulário". seu navegador.
precisa saber é o seguinte
É justo, e foi por isso que mencionei a perspectiva REST.
Gary Rowe
5

Eu diria que geralmente não, com o argumento de que, quando um formulário é enviado com campos inválidos, o que você normalmente deseja exibir em resposta é o mesmo formulário com a mesma população de campos, além de algumas mensagens de erro. Isso seria oneroso para executar via POST / Redirect / GET - como você garantiria que a página retornada pelo GET já tivesse as entradas do usuário nos campos do formulário?

Carson63000
fonte
2
Armazenando temporariamente o resultado em uma sessão (pela duração de uma solicitação de acompanhamento)?
Decent Dabbler
2
@fireeyedboy: sim, isso faria isso .. parece um pouco de desdém.
precisa saber é o seguinte