web-dev-qa-db-fra.com

Quand est-il approprié de répondre avec une erreur HTTP 412?

Je ne sais pas quand vous devez et ne devez pas retourner un HTTP 412: échec de la condition préalable, erreur pour un service Web? Je pense à l'utiliser lors de la validation des données. Par exemple, si les données XML d'un client POST et que ces données manquent un élément de données requis, alors répondre avec un 412 et une description de l'erreur.

Cela correspond-il à l'esprit de réponse avec un HTTP 412, ou faut-il utiliser autre chose (par exemple, un autre code d'erreur http ou une exception d'application Web)?

34
TERACytE

Si vous regardez RFC 2616 vous verrez un certain nombre d'en-têtes de demande qui peuvent être utilisés pour appliquer des conditions à une demande:

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

Ces en-têtes contiennent des "conditions préalables", permettant au client de dire au serveur de ne terminer la demande que si certaines conditions sont remplies. Par exemple, vous utilisez une demande PUT pour mettre à jour l'état d'une ressource, mais vous souhaitez que la fonction PUT soit actionnée uniquement si la ressource n'a pas été modifiée par quelqu'un d'autre depuis votre dernier GET.

Le code d'état de la réponse 412 (Échec de la condition préalable) est généralement utilisé lorsque ces conditions préalables échouent.

Votre exemple ressemble à une demande non valide (c'est-à-dire que le client a soumis des données non valides en raison de valeurs manquantes). Un code d'état de 400 (Bad Request) est plus approprié ici IMO.

55
joelittlejohn

412 est réservé aux cas où la demande est conditionnelle et la condition n'est pas remplie.

Pour votre cas d'utilisation, 422 Unprocessable Entity est une bonne correspondance.

10
Julian Reschke

Votre meilleur pari serait d'éviter 412. Dans la pratique, la plupart des services Web que j'ai utilisés envoient un 400 code (Bad Request) . De nombreux frameworks ont également un support intégré pour 400 et vos clients apprécieront un code d'erreur plus courant. Souvent, en particulier avec les interfaces REST, un simple élément "message" ou "error" est renvoyé avec une description.

8
Matt Bishop