Estou trabalhando em um projeto e depois de discutir com as pessoas no trabalho por mais de uma hora. Decidi saber o que as pessoas na troca de pilhas poderiam dizer.
Estamos escrevendo uma API para um sistema, há uma consulta que deve retornar uma árvore da organização ou uma árvore de objetivos.
A árvore da organização é a organização na qual o usuário está presente. Em outras palavras, essa árvore sempre deve existir. Na organização, uma árvore de objetivos deve estar sempre presente. (foi aí que o argumento começou). Caso a árvore não exista, meu colega de trabalho decidiu que seria correto responder a resposta com o código de status 200. E então comecei a me pedir para corrigir meu código porque o aplicativo estava desmoronando quando não havia árvore.
Vou tentar poupar chamas e fúria.
Sugeri gerar um erro 404 quando não há árvore. Pelo menos, me informaria que algo está errado. Ao usar o 200, tenho que adicionar uma verificação especial à minha resposta no retorno de chamada de sucesso para lidar com erros. Estou esperando receber um objeto, mas posso receber uma resposta vazia porque nada foi encontrado. Parece totalmente justo marcar a resposta como 404. E então a guerra começou e recebi a mensagem de que não entendia o esquema do código de status HTTP. Então, eu estou aqui e perguntando o que há de errado com 404 neste caso? Eu até entendi o argumento "Não encontrou nada, então é correto retornar 200". Eu acredito que está errado, pois a árvore deve estar sempre presente. Se não encontramos nada e esperamos algo, deve ser um 404.
Mais informações,
Esqueci de adicionar os URLs que foram buscados.
Organizações
/OrgTree/Get
Metas
/GoalTree/GetByDate?versionDate=...
/GoalTree/GetById?versionId=...
Meu erro, ambos os parâmetros são necessários. Se qualquer versionDate que puder ser analisada até uma data for fornecida, ela retornará a revisão de fechamento. Se você digitar algo no passado, ele retornará a primeira revisão. Se por ID com um ID que não existe, suspeito que ele retornará uma resposta vazia com 200.
Extra
Além disso, acredito que a melhor resposta para o problema é criar objetos padrão quando as organizações são criadas, não ter árvore não deve ser um caso válido e deve ser visto como um comportamento indefinido. Não há como uma conta ser usada sem as duas árvores. Por esse motivo, eles devem estar sempre presentes.
também eu liguei isso (um semelhante, mas não consigo encontrá-lo)
http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png
/GoalTree/GetById?versionId=CompletelyInvalidID
retornar? Não foi bem-sucedido, pois o recurso chamado /GoalTree/GetById?versionId=CompletelyInvalidID
literalmente não foi encontrado.