Je n'aurai pas l'arrogance de prétendre qu'il s'agit d'une norme et j'utiliserai donc la formule "je préfère".
Je préfère une réponse laconique (lorsque je demande une liste de /articles, je veux un tableau JSON d'articles).
Dans mes conceptions, j'utilise HTTP pour le rapport d'état, une 200 ne renvoie que la charge utile.
400 renvoie un message indiquant ce qui ne va pas avec la demande :
{"message" : "Missing parameter: 'param'"}
Retourner à 404 si le modèle/contrôleur/URI n'existe pas
S'il y a eu une erreur de traitement de mon côté, je renvoie 501 avec un message :
{"message" : "Could not connect to data store."}
D'après ce que j'ai vu, un grand nombre de frameworks REST ont tendance à suivre cette voie.
Justification :
JSON est censé être un charge utile il ne s'agit pas d'un protocole de session. L'idée de charges utiles verbeuses de type session provient du monde XML/SOAP et de divers choix malencontreux qui ont créé ces conceptions gonflées. Après avoir réalisé que tout cela était un énorme casse-tête, l'objectif de REST/JSON était de le simplifier et d'adhérer à HTTP. Je ne pense pas qu'il y ait quoi que ce soit qui puisse ressembler de près ou de loin à ce que l'on pourrait appeler un " système ". standard dans l'un ou l'autre JSend et surtout pas avec le plus verbeux d'entre eux. XHR réagira à la réponse HTTP, si vous utilisez jQuery pour votre AJAX (comme la plupart le font) vous pouvez utiliser try
/ catch
et done()
/ fail()
pour capturer les erreurs. Je ne vois pas en quoi encapsuler les rapports d'état dans JSON est plus utile que cela.
25 votes
Les gens ont probablement tiré une leçon de SOAP et ne le construiront plus...
27 votes
@dystroy : Vous pouvez expliquer votre commentaire ?
4 votes
XML a été, à mon avis, tué pour les programmeurs par un excès de normalisation résultant en un gonflement des API et des applications, ce qui a finalement conduit les gens à ne presque jamais, aujourd'hui, faire SOAP de la manière simple originale de quelques LOC mais avec des bibliothèques lentes, la paramétrisation et même des cadres de construction de code... Je suis sûr que la plupart des concepteurs d'aujourd'hui ne veulent pas que le même cauchemar se produise. Mais ce n'est qu'une opinion et je ne veux pas salir votre question avec d'autres commentaires nauséabonds.
7 votes
Cette question m'a vraiment intéressé car j'ai dû concevoir une API JSON récemment et je me suis demandé s'il existait des normes définissant un format de réponse. Le vôtre a l'air plutôt sympa et mérite d'être utilisé si vous ne trouvez pas de norme. C'est dommage que les réponses fournies ne répondent pas vraiment à la question.
18 votes
@Alex malheureusement, c'est parce que peu importe où vous allez, il y a pas de standard. Non seulement au sein de JSON lui-même, mais aussi en ce qui concerne la façon de l'utiliser pour les applications RESTful, ou toute autre chose de ce genre. Tout le monde le fait différemment. Vous pouvez vous sentir libre de suivre les meilleures pratiques (réponses HTTP, structure de paquet significative, un œil sur la structuration de vos données pour la consommation par votre système), mais tout le monde qui est un grand distributeur fait au moins une chose différente des autres... Il n'y a pas de norme, et il n'y en aura probablement pas, alors construisez quelque chose de solide, et construisez-le à votre mesure.
7 votes
@Norguard il existe des normes (voir ma réponse). En effet Ce qui est bien avec les normes, c'est que vous avez l'embarras du choix. - Andrew Tanenbaum
0 votes
@DenysSéguret : Et pourtant, aujourd'hui, il y a REST.
0 votes
@MichaelScheper REST est absolument différent de SOAP. Et REST ne standardise pas du tout JSON.
1 votes
@DenysSéguret : J'ai peut-être mal compris votre non-discours. L'OP demandait comment " structurer les réponses JSON d'une API ". JSON a largement remplacé XML, et même si je ne suis pas sûr que REST standardise les réponses elles-mêmes, il standardise les API web, d'une manière beaucoup moins cauchemardesque que XML. Dans les projets impliquant de nombreux ingénieurs, il est agréable de disposer d'une norme que tout le monde peut suivre, et j'aimerais qu'il y en ait une pour les réponses. J'essaie d'écrire du code client réutilisable et, si la vérification du HTTP 200 est assez facile, je suis souvent frustré par les structures incohérentes des réponses aux erreurs, que j'aimerais consigner.
6 votes
xkcd.com/927
0 votes
Très bonne question. Nous avons d'abord utilisé des objets dynamiques en C# et nous avons rapidement eu du mal à savoir ce qu'étaient les données. L'idée que vous avez présentée semble en fait être un bon standard.
0 votes
Ce sujet devrait vraiment être transféré à ingénieur logiciel car il est plus subjectif.
1 votes
Les "normes" mentionnées dans la réponse vérifiée sont horribles (gonflées, incompréhensibles), Celle que vous avez est celle que j'utilise également. Peut-être que tous ceux qui l'utilisent devraient se réunir et la publier comme leur propre norme.
2 votes
L'élément "success" semble un peu redondant de nos jours. Il vaut mieux renvoyer le code d'état HTTP correct : 2xx en cas de succès, 4xx si la demande du client a provoqué l'erreur, 5xx si le serveur a provoqué l'erreur.