-
Notifications
You must be signed in to change notification settings - Fork 374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Padrão no retorno de Erros #97
Comments
Show @filipedeschamps... Pelo que entendi identificaríamos os erros pelo status code da requisição. Ai fiquei com uma dúvida. No exemplo que você deu o erro ocorreu devido a uma regra da aplicação. Nesses casos devemos responder com um status 200, indicando que o servidor processou a requisição e por algum motivo deu erro e incluir uma flag dentro da resposta mostrando que teve um erro (tipo um Sempre fico em dúvida nessa parte, porque fico tentado encontrar o melhor status code para descrever o problema retornado. No exemplo que você deu e olhando a definição do http status code, talvez o status 400 não seria a melhor opção, visto que o servidor conseguiu entender a requisição. 🤔 |
Excelente pergunta @rhandrade ! Nós devemos usar os status code sim ao retornar a request no controller 👍 então como você já pode deduzir pelo status code se a request teve sucesso ou não, acho redundante colocar uma propriedade/flag a mais na resposta. Incusive a maioria das bibliotecas que consomem endpoints http vão escolher continuar ou jogar um erro dependendo do status code retornado. O exemplo que coloquei é meio mock, mas sobre a parte de faltar alguns campos ali, a gente poderia usar o
|
Show @filipedeschamps, agora consegui entender melhor essa questão. Vlw 👍 |
Bem legal, ter esta tarefa para padronizar! criar algo inicial para ir modelando o lançamento e tratamento de erros. Eu gostaria de apresentar aqui uma linha um pouco relacionado com isto, mas é mais abrangente, é o OpenAPI que tambem tem seu estilo de exibir os erros. Por exemplo,
Eu tentei criar uma versão bem inicial do OpenAPI para o tabnews, pensando mais nos status_code e input/output.
p.s:
Também tentei integrar no Next-JS o OpenAPI, mas falhei miseravelmente: Dai acabei fazendo com uma stack que tenho mais conhecimento, então esta versão rodando no Heroku foi feita com Python/Flask |
Que maneiro @huogerac. Achei a ideia de usar a OpenAPI sensacional por ela já ser um padrão para descrever APIs bem difundido. Quanto ao exemplo que você deu talvez não seria necessário colocar o status code dentro do objeto, como o @filipedeschamps tinha comentado na minha dúvida... Esses dias tava fuçando na API beta do OpenAI e curti o modo como eles retornam os erros, deixo um exemplo abaixo. A requisição nesse caso retornou um status code 404 com o seguinte objeto:
|
Show pessoal, estou voltando nessa thread :) Sobre um objeto de erro singular, como é feito no caso onde é preciso retornar múltiplos erros? Por exemplo numa validação de um formulário em que mais de 1 campo pode não passar na validação? Mas sobre o OpenAPI num geral, ele é uma descrição de como a API funciona, e também define os padrões de resposta, e com isso consegue gerar documentação, correto? To pesquisando a respeito. Quem usa, fala muito bem, mas não to conseguindo achar uma adoção massiva ao ponto de me sentir confortável em colocar essa abstração em cima das respostas. Mas vou estudar mais a respeito 👍 Em paralelo, vejo também que é uma camada que dá para colocar por cima depois, e no estágio atual do projeto, podemos mudar qualquer interface pública que quisermos 🤝 |
Criei um PR #129 como proposta da padronização dos erros utilizando o |
@filipedeschamps Acredito que quando forem muitos erros poderíamos retornar um array contendo vários objetos erros, cada qual com o erro que aconteceu. O Laravel tem uma proposta semelhante se não estou enganado, no qual temos um objeto errors, no qual cada propriedade é um campo que causou o erro e o valor é um array contendo com todos os erros de validação para aquele campo. Sobre a OpenAPI eu entendi isso ai tbm. |
Olá pessoal! Essa issue foi resolvida no PR #131 certo? o que acham de fecharmos para focar nas pendências ainda existentes? |
Show @rhandrade o custom error consegue esperar um array de erros e retornar no @brunofamiliar corretíssimo e valeu pelo toque! Fechando a issue 😍 |
Descrição
Como desenvolvedor do sistema ou consumidor da API, eu gostaria de contar com um padrão de erros, tanto na implementação de erros customizados, quanto no retorno da API.
Motivo
Consultas com sucesso vão acabar não tendo um padrão no seu retorno, pois hora um endpoint pode retornar um objeto, hora pode retornar uma lista, mas retornos com erro podem ter um padrão. Isso é extremamente importante, pois o "caminho feliz" de uma aplicação é geralmente muito discutido, mas o "caminho infeliz" pode fugir do nosso controle e um padrão no objeto de retorno pode ajudar muito a mostrar esse erro de uma forma legal numa interface com o usuário, ou programaticamente quando consultado por um outro programa.
Execução
Tem uma talk que fiz no Pagar.me Talks sobre como fazer erros customizados e de uma forma padronizada, não sei se esse assunto evoluiu ao ponto de mudar alguma coisa, é preciso avaliar.
De qualquer forma, segue aqui uma sugestão da estrutura do objeto de retorno (e sempre super aberto a discussão):
Dependência
Seria interessante primeiro executar a issue #96 e padronizar os controllers.
The text was updated successfully, but these errors were encountered: