J'écris un service Web qui n'accepte que json et ne produit également que json.
Je dois donc retourner le code d'état approprié si un autre format est demandé.
Il semble que j'ai deux choix:
Ce serait formidable si quelqu'un pouvait m'éclairer sur la sémantique des deux codes.
406 est retourné par le serveur lorsqu'il ne peut pas répondre en acceptant les en-têtes de demande (c'est-à-dire qu'ils ont un en-tête Accept qui indique qu'ils seulement veulent XML).
415 est retourné par le serveur lorsque l'entité a envoyé une demande (le contenu dans un POST ou PUT) a un type de support non pris en charge (c'est-à-dire qu'ils ont envoyé du XML).
donc .. 406 quand vous ne pouvez pas envoyer ce qu'ils veulent, 415 quand ils envoient ce que vous ne voulez pas.
J'espère que cela pourra aider!
Accept
a été envoyé, vous ne pouvez pas remplir complètement.Content-Type
est envoyé, vous ne pouvez pas l'utiliser.Pour citer RFC2616 :
406 Non acceptable
La ressource identifiée par la demande est uniquement capable de générer des entités de réponse dont les caractéristiques de contenu ne sont pas acceptables selon les en-têtes d'acceptation envoyés dans la demande.
Lorsqu'un client interroge votre service, vérifiez ce que Accept*
en-têtes envoyés; s'il ne correspond pas à application/json
(ou un caractère générique, par exemple */*
), retournez ceci. La réponse doit indiquer "nous ne servons que du JSON ici".
415 Type de support non pris en charge
Le serveur refuse de traiter la demande car l'entité de la demande est dans un format non pris en charge par la ressource demandée pour la méthode demandée.
Je reviens juste 415 Unsupported Media Type
devrait être la réponse minimale pour "le client a envoyé quelque chose qui n'est pas JSON, ne peut pas travailler avec ça"; Je ne sais pas s'il y a un en-tête pour indiquer "vous devez envoyer JSON"
406 est utilisé lorsque le client demande une réponse dans un type de contenu non pris en charge (dans votre cas, autre que JSON) à l'aide de l'en-tête Accept. 415 d'autre part est utilisé lorsque les données POST ou PUT du client dans un type de contenu non pris en charge.
En un mot: utilisez 406 si vous ne pouvez pas sortir au format attendu et utilisez 415 si vous ne supportez pas le format d'entrée.