2011-03-20 52 views
24

No está claro para mí cuándo debe y no debe devolver un error HTTP 412: Error de precondición para un servicio web. Estoy pensando en usarlo al validar los datos. Por ejemplo, si los datos XML de un POST de un cliente y esos datos carecen de un elemento de datos requerido, responden con un 412 y una descripción del error.¿Cuándo es apropiado responder con un error HTTP 412?

¿Eso se alinea con el espíritu de respuesta con un HTTP 412, o debería usarse algo más (por ejemplo, otro código de error http o excepción de aplicación web)?

Respuesta

7

Su mejor opción sería evitar 412. En la práctica, la mayoría de los servicios web que he usado envían un 400 code (Bad Request). Muchos frameworks también tienen soporte integrado para 400 y sus clientes apreciarán un código de error más común. Muchas veces, especialmente con las interfaces REST, se devuelve un elemento simple de "mensaje" o "error" con una descripción.

+2

Se supone que los clientes tratan cualquier código 4xx desconocido como 400 de todos modos. –

+1

¿Qué hay de 404? – JoelFan

+0

@JoelFan 404 no sería un código desconocido. Probablemente, ese debería ser manejado mientras que cualquier código 400-499 no manejado explícitamente debe tratarse como un 400 genérico. – BamaPookie

45

Si nos fijamos en RFC 2616 verá un número de cabeceras de petición que se pueden utilizar para aplicar condiciones a una petición:

If-Match 
If-Modified-Since 
If-None-Match 
If-Range 
If-Unmodified-Since 

Estas cabeceras contienen 'condiciones previas', lo que permite que el cliente comunique al servidor para completar solo la solicitud si se cumplen ciertas condiciones. Por ejemplo, utiliza una solicitud PUT para actualizar el estado de un recurso, pero solo desea que se actúe el PUT si el recurso no ha sido modificado por otra persona desde su GET más reciente.

El código de estado de respuesta 412 (Precondición fallida) se usa normalmente cuando fallan estas condiciones previas.

Su ejemplo suena como una solicitud no válida (es decir, el cliente ha enviado datos que no son válidos debido a valores perdidos). Un código de estado de 400 (Solicitud incorrecta) es más apropiado aquí IMO.

+0

@TERACytE ¿hay alguna posibilidad de que aceptes esto? – joelittlejohn

6

412 está reservado para los casos en que la solicitud es condicional y la condición no se cumple.

Para su caso de uso, 422 Unprocessable Entity es una buena combinación.

+4

Vale la pena mencionar que el código de estado '422' no es parte de RFC 2616. Es parte de una extensión de HTTP 1.1 para WebDAV. – joelittlejohn

+1

joelittlejohn: ¿por qué es eso un problema? Los códigos de estado son un punto de extensión en RFC 2616, y esta es una extensión muy útil. –

+2

No quise dar a entender que es un problema, solo que vale la pena mencionarlo :) – joelittlejohn

Cuestiones relacionadas