¿Qué código de estado debo usar para validaciones fallidas o duplicados no válidos?
Estoy creando una aplicación con una API basada en REST y he llegado al punto en el que especifico códigos de estado para cada solicitud.
¿Qué código de estado debo enviar para solicitudes que no superan la validación o cuando una solicitud intenta agregar un duplicado en mi base de datos?
Revisé http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html pero ninguno parece correcto.
¿Existe una práctica común al enviar códigos de estado?
Por error de validación de entrada: 400 Solicitud incorrecta + su descripción opcional. Esto se sugiere en el libro " RESTful Web Services ". Para envío doble: Conflicto 409
Actualización junio 2014
La especificación relevante solía ser RFC2616 , que daba el uso de 400 (Solicitud incorrecta) de manera bastante limitada.
El servidor no pudo entender la solicitud debido a una sintaxis incorrecta
Por tanto, se podría haber argumentado que era inadecuado para los errores semánticos. Pero ya no más; Desde junio de 2014, el estándar relevante RFC 7231 , que reemplaza al anterior RFC2616, otorga el uso de 400 (Bad Request) de manera más amplia como
el servidor no puede o no quiere procesar la solicitud debido a algo que se percibe como un error del cliente
- Validación fallida: 403 Prohibido ("El servidor entendió la solicitud, pero se niega a cumplirla"). Contrariamente a la opinión popular, RFC2616 no dice "403 sólo está destinado a una autenticación fallida", sino "403: sé lo que quieres, pero no lo haré". Esa condición puede deberse o no a la autenticación.
- Intentando agregar un duplicado: Conflicto 409 ("La solicitud no se pudo completar debido a un conflicto con el estado actual del recurso").
Definitivamente deberías dar una explicación más detallada en los encabezados y/o el cuerpo de la respuesta (por ejemplo, con un encabezado personalizado X-Status-Reason: Validation failed
).