Eu tenho um pedido JSON que eu'm postar para um URL HTTP.
Deve ser tratado como 400
onde o campo requestedResource
existe mas "Roman"
é um valor inválido para este campo?
[{requestedResource:"Roman"}]
Isto deve ser tratado como 400
onde "blah"
campo não'não existe de todo?
[{blah:"Roman"}]
Um 400 significa que o pedido foi malformado. Em outras palavras, o fluxo de dados enviado pelo cliente para o servidor não't segue as regras.
No caso de uma API REST com uma carga útil JSON, 400's são normalmente, e corretamente eu diria, usados para indicar que o JSON é inválido de alguma forma de acordo com a especificação da API para o serviço.
Por essa lógica, os dois cenários que você forneceu devem ser 400's.
Imagine, em vez disso, que isto fosse XML e não JSON. Em ambos os casos, o XML nunca passaria na validação do esquema - seja por causa de um elemento indefinido ou por um valor impróprio do elemento. Isso seria um mau pedido. O mesmo acordo aqui.
Pense nas expectativas.
Como um aplicativo cliente, você espera saber se algo dá errado no lado do servidor. Se o servidor precisar lançar um erro quando blah' estiver faltando ou o valor
requestedResource' estiver incorreto, um erro de 400 seria apropriado.