Pergunta

Temos uma API REST que os clientes rotineiramente post e colocar os dados. Quando eles fazem isso, às vezes eles dados POST o que resulta em nenhuma mudança em nosso sistema. Os postes e coloca são bem formados, mas eles dados que está enviando é idêntica aos dados em nosso banco de dados. Quando isso acontece, eu só descobri que estamos retornando um status 400 HTTP. Infelizmente, isto significa "mau pedido" como em "solicitação não pôde ser entendida pelo servidor devido à sintaxe malformado".

É evidente que este não é o caso, mas me disseram que vamos usar isso desde que não há nenhum outro código de status apropriado. Escolhas que você considerou:

  • 304 não modificado. Este, infelizmente, é apenas para solicitações GET.
  • 204 Nenhum conteúdo. Parece perto, mas proíbe uma entidade-corpo.

Outras opções parecem igualmente ruim. Podemos ir com 200 OK e ter a informação relevante no documento XML que voltar, mas isso não parece muito "RESTish". Como é que o mundo RESTO geralmente lidar com isso?

(Fixed código de resposta não modificado. Graças Mkoeller)

Foi útil?

Solução

Eu acho que é perfeitamente possível retornar um 200 OK, nesse caso, os dados foram processados ??corretamente eo servidor fez o que tinha que fazer. Como o servidor processado corretamente os dados, ele deve retornar um código de status OK. O fato de que ele ignorou internamente é ou deveria ser irrelevante.

O que o servidor fez com que os dados não devem ser informados aos clientes, eles devem ser dito o que aconteceu com o pedido (ok processado, ocorreu um erro, e assim por diante).

E se, por algum motivo estranho (eu não posso pensar um válido, btw), é de interesse para os clientes, você tem a resposta para dizer-lhes isso.

Outras dicas

Se os clientes são capazes de conhecer a tag entidade para o conteúdo no servidor antes de colocar, em seguida, usando cabeçalhos If-Match e existe a resposta Falha 412 Precondition para exatamente a situação que você descreve.

De cliente visualizar o status do servidor é o mesmo se o conteúdo do pedido era o mesmo no servidor ou não, certo? Como o servidor depois detém excactly o conteúdo que foi enviado, por que deve responder o servidor com qualquer tipo de status de erro? Por outro lado, por que o cliente se preocupar se o conteúdo do pedido era o mesmo que já conhecido para o servidor? Ele foi transferido com sucesso para o servidor para a maior parte do trabalho é feito. Como é um cliente espera para reagir se houvesse um código de resposta diferente para esta situação?

Conclusão: A sua situação com um teor pedido igualando o conteúdo existente há nenhum caso especial. Você deve responder com o mesmo código de status de resposta. Isso pode ser 200, 302 ou 303.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top