A devolver o http 200 OK com erro dentro do corpo de resposta

pergunto-me se é correcto devolver {[[0]} quando ocorreu um erro no lado do servidor com algum erro dentro do corpo de resposta.

exemplo:

    Estamos a enviar. Algo inesperado aconteceu do lado do servidor.
  1. O Servidor devolve http 200 OK o código de estado com um erro dentro de uma resposta (por exemplo {"status":"some error occured"}

é o comportamento correcto ou não? Não devíamos mudar o código de situação?

Author: CodeCaster, 2015-01-13

5 answers

Não, isto está muito incorrecto.

HTTP é um protocolo de Aplicação. 200 implica que a resposta contém uma carga útil que representa o estado do recurso solicitado. Uma mensagem de erro geralmente não é uma representação desse recurso.

Se algo correr mal ao processar o GET, o código de estado certo é 4xx ("você estragou tudo") ou 5xx ("eu estraguei tudo").

 61
Author: Julian Reschke, 2015-01-13 13:05:33
Os códigos de estado HTTP dizem algo sobre o protocolo HTTP. HTTP 200 significa que a transmissão está OK no nível HTTP (ou seja, o pedido estava tecnicamente OK e o servidor foi capaz de responder correctamente). Veja esta página wiki para uma lista de todos os códigos e o seu significado.

HTTP 200 não tem nada a ver com o sucesso ou o fracasso do seu "código de Negócio". No seu exemplo, o HTTP 200 é um estado aceitável para indicar que a sua "mensagem de erro de código comercial" foi transferida com sucesso, desde que nenhuma questão técnica impediu a lógica empresarial de funcionar adequadamente.

Em alternativa, poderá deixar o seu servidor responder com {[[2]} se tiverem ocorrido problemas técnicos ou não recuperáveis no servidor. Ou HTTP 4xx Se o pedido recebido tivesse problemas (por exemplo, parâmetros errados, método HTTP inesperado... Mais uma vez, todos estes indicam erros técnicos, enquanto HTTP 200 indica Não erros técnicos, mas não garante erros lógicos de negócios.

Para resumir: sim é válido enviar mensagens de erro (para questões não técnicas) na sua resposta http juntamente com o HTTP status 200. Se isto se aplica ao seu caso depende de si. Se, por exemplo, o cliente está pedindo um arquivo que não está lá, isso seria mais como um 404. Se houver uma configuração errada no servidor que possa ser um 500. Se o cliente pedir um assento em um avião que está cheio de reservas, isso seria 200 e sua "implementação" irá ditar como reconhecer/lidar com isso (por exemplo, bloco JSON com a { "booking","failed" })
 12
Author: geert3, 2015-01-14 09:53:07

Mesmo que eu queira devolver um erro de lógica de negócio como código HTTP não existe tal código de erro HTTP aceitável para esses erros, em vez de usar HTTP 200, porque ele irá deturpar o erro real.

Então, HTTP 200 será bom para erros de lógica de negócios. Mas todos os erros que são cobertos por códigos de erro HTTP devem usá-los.

Basicamente HTTP 200 significa que o servidor processa correctamente o pedido do utilizador (no caso de não haver lugares no avião, não importa porque o utilizador o pedido foi processado corretamente, ele pode até mesmo retornar apenas um número de lugares disponíveis no avião, de modo que não haverá erros de lógica de negócios em tudo ou que a lógica de negócios pode ser do lado do cliente. Erro de lógica de negócios é um significado abstrato, mas o erro HTTP é mais definido).

 7
Author: Alexanderius, 2015-08-12 07:07:11

Para esclarecer, você deve usar códigos de erro HTTP onde eles se encaixam com o protocolo, e não usar códigos de estado HTTP para enviar lógica de negócios erros.

Erros como saldo insuficiente, não existem cabinas disponíveis, mau utilizador / Senha qualifica-se para o estado de HTTP 200 com o tratamento de erros específico da aplicação no corpo de resposta.

Ver Esta resposta de engenharia de software:

Eu diria que é melhor ser explícito sobre o separação de protocolos. Deixe o Servidor HTTP e o navegador da web fazer sua própria coisa, e deixe o aplicativo fazer sua própria coisa. O aplicativo precisa ser capaz de fazer pedidos, e precisa das respostas--e sua lógica de como solicitar, como interpretar as respostas, pode ser mais (ou menos) complexa do que a perspectiva HTTP.
 2
Author: vedant, 2018-07-11 07:58:39

HTTP é o protocolo que trata da transmissão de dados através da internet.

Se essa transmissão quebrar por qualquer razão, os códigos de erro HTTP dizem - te porque não pode ser enviada para ti.

Os dados que estão a ser transmitidos não são tratados pelos códigos de Erro HTTP. Apenas o método de transmissão.

HTTP não pode dizer 'Ok, esta resposta é gobbledigook, mas aqui está'. diz apenas:

Ou seja, completei o meu trabalho de o entregar a ti, o resto depende de TI . você. [[2] eu sei que isso já foi respondido, mas eu coloquei-o em palavras que eu posso entender. desculpe a repetição.
 0
Author: Chris Groves, 2018-09-10 15:14:39