Pour ce que ça vaut, je fais ça différemment. Un appel réussi n'a que les objets JSON. Je n'ai pas besoin d'un objet JSON de niveau supérieur qui contient un champ de réussite indiquant vrai et un champ de charge utile qui a l'objet JSON. Je viens de renvoyer l'objet JSON approprié avec un 200 ou tout ce qui est approprié dans la plage 200 pour le statut HTTP dans l'en-tête.
Cependant, s'il y a une erreur (quelque chose dans la famille 400), je retourne un objet d'erreur JSON bien formé. Par exemple, si le client POSTE un utilisateur avec une adresse e-mail et un numéro de téléphone et que l'un d'eux est mal formé (c'est-à-dire que je ne peux pas l'insérer dans ma base de données sous-jacente), je retournerai quelque chose comme ceci:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
Les bits importants ici sont que la propriété "field" doit correspondre exactement au champ JSON qui n'a pas pu être validé. Cela permet aux clients de savoir exactement ce qui n'a pas fonctionné avec leur demande. En outre, "message" se trouve dans les paramètres régionaux de la demande. Si "emailAddress" et "phoneNumber" n'étaient pas valides, le tableau "erreurs" contiendrait des entrées pour les deux. Un corps de réponse JSON 409 (conflit) pourrait ressembler à ceci:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
Avec le code d'état HTTP et ce JSON, le client a tout ce dont il a besoin pour répondre aux erreurs de manière déterministe et il ne crée pas une nouvelle norme d'erreur qui tente de remplacer les codes d'état HTTP. Notez que cela ne se produit que pour la plage de 400 erreurs. Pour tout ce qui est dans la gamme 200, je peux simplement retourner tout ce qui est approprié. Pour moi, c'est souvent un objet JSON de type HAL, mais cela n'a pas vraiment d'importance ici.
La seule chose que j'ai pensé à ajouter était un code d'erreur numérique soit dans les entrées du tableau "erreurs", soit à la racine de l'objet JSON lui-même. Mais jusqu'à présent, nous n'en avons pas eu besoin.