2012-05-24 36 views
20

Así que estoy desarrollando una API RESTcódigo de estado HTTP 400 vs 412

Cuando se realiza una POST para crear un recurso y un campo requerido no se encuentra lo que debería volver?

400 - Solicitud incorrecta

O

412 - Error de condición previa

y por qué?

Respuesta

28

Utilice 400 si los parámetros de la son incorrectos. Utilice 412 si uno de los pedidos If-*encabezados como If-Match, If-Modified-Since, etc. son incorrectos.

¿Por qué? Eso es lo que dice RFC. Véase, por ejemplo, este extracto de If-Match especificación:

Si ninguna de las etiquetas coinciden entidad, o si "*" se da y no existe ninguna entidad actual, el servidor debe NO lleve a cabo el método solicitado, y debe devolver un 412 (Falló la precondición). Este comportamiento es más útil cuando el cliente desea evitar que un método de actualización, como PUT, modifique un recurso que ha cambiado desde que el cliente lo recuperó por última vez.

+1

También indica que la solicitud no pudo cumplirse debido a una sintaxis mal formada para 400. – Rob

+1

Esta página realmente me ayudó - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- Usar las solicitudes de 'PUT' para el contexto me facilitó comprender para qué sirve, ya que siempre es fácil abusar de ciertos códigos de estado. – Charlie

12

412 se usa cuando su servidor no cumple con una condición especificada por el cliente.

En su caso, debe usar un 400. Es solo una mala solicitud.

Consulte este link para obtener alguna explicación sobre los encabezados de condición previa.

El encabezado Etag es, generalmente, una cadena que representa nuestro recurso en los encabezados HTTP. Usted solicita un recurso con un If-Match es un encabezado HTTP precondicional . Le enviará un 412 si no coincide con el código que ha enviado.

If-None-Match le dice al servidor que procese toda una respuesta solo si el Etag es diferente al enviado por el cliente.

+0

¿Por qué el voto a favor? ¿Qué pasa con la respuesta? – nunespascal

+4

Creo que alguien tuvo un mal día. Solo ignóralo y deja que el sistema haga su trabajo :) – BalusC

+0

Obtén un voto favorable para equilibrarlo. –

3

Puede usar el código de estado 422. Si no quiere, 400 está bien.

Cuestiones relacionadas