Tengo una petición JSON que estoy enviando a una URL HTTP.
¿Debe tratarse como 400
cuando el campo requestedResource
existe pero `"Roman"es un valor no válido para este campo?
[{requestedResource:"Roman"}]
¿Debe tratarse como "400" cuando el campo "blah" no existe?
[{blah:"Roman"}]
Un 400 significa que la solicitud estaba malformada. En otras palabras, el flujo de datos enviado por el cliente al servidor no seguía las reglas.
En el caso de una API REST con una carga útil JSON, los 400 se utilizan normalmente, y diría que correctamente, para indicar que el JSON no es válido de alguna manera según la especificación de la API para el servicio.
Según esa lógica, los dos escenarios que has proporcionado deberían ser 400's.
Imagina que, en cambio, se tratara de XML en lugar de JSON. En ambos casos, el XML nunca pasaría la validación del esquema, ya sea por un elemento indefinido o un valor de elemento incorrecto. Eso sería una mala petición. Lo mismo ocurre aquí.
Piensa en las expectativas.
Como aplicación cliente, esperas saber si algo va mal en el lado del servidor. Si el servidor necesita lanzar un error cuando falta blah
o el valor de requestedResource
es incorrecto entonces un error 400 sería apropiado.