Estou projetando uma API RESTful e enfrentando o problema do título, atualizado para maior clareza:
Devo falhar rapidamente se um cliente enviar um parâmetro não reconhecido? Por exemplo,
http://example.com/api/foo?bar=true&paula=bean
Acima, bar
é um parâmetro válido, mas paula
não é especificado pela API. Eu devo
- Avise o cliente do erro
- Falhar rápido
- Ignore isto
Se eu avisar o cliente, só posso emitir um aviso para o primeiro parâmetro, pois eles podem estar enviando um número quase infinito deles e o servidor provavelmente tem coisas melhores a fazer. Da mesma forma, ao falhar, especificaria apenas o primeiro parâmetro inválido como o problema.
Prefiro falhar do que emitir um aviso para forçar o programador a tomar uma ação, pois, caso contrário, eles podem ignorar o problema e continuar desperdiçando recursos, ou acabam se culpar inadvertidamente. Não fazer nada é ainda pior a esse respeito.
Meus argumentos fazem sentido? Existe uma prática aceita em tais coisas?
fonte
api/v1
etc. cuidaria disso, mas ainda não permite atualizações incrementais. +1Respostas:
Na minha opinião, você deve retornar um status de solicitação inválida, para que o cliente saiba que o que está tentando fazer não é válido. Minha opinião sobre isso é influenciada pelo conceito de que as APIs RESTful são detectáveis . Se você estiver fornecendo informações suficientes antecipadamente, o cliente nunca tentará fazer uma solicitação inválida para começar. Caso isso aconteça, há algo errado no código do cliente e, se falhar rapidamente, alertará o segundo sobre esse bug. Obviamente, essa é uma abordagem muito purista e pode não ser recomendada se sua API não for detectável.
Uma abordagem mais pragmática pode ser ignorar os parâmetros inválidos, mas, seja como for, certifique-se de documentar bem o comportamento.
fonte
Se você faz API pública (ou API que será usada por outra equipe), eu recomendaria o erro de retorno, como sugerido pelo @RubberDuck.
Se sua API será consumida apenas dentro de sua equipe (ou apenas por você), talvez seja mais fácil ignorar campos extras (por exemplo, requer menos código e mais facilidade).
fonte