La bonne manière de définir le statut de la réponse et le contenu JSON dans une API REST faite avec nodejs et express
Je joue avec Nodejs et de l'exprimer par la construction d'une petite API rest. Ma question est, quelle est la bonne pratique/meilleure façon de définir le code d'état, ainsi que les données de réponse?
Laissez-moi vous expliquer avec un peu de code (je ne vais pas mettre le nœud et d'exprimer code nécessaire pour démarrer le serveur, le routeur méthodes qui sont concernés):
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
res.json(user);
});
exports.getUserById = function(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) return users[i];
}
};
Le code ci-dessous fonctionne parfaitement, et lors de l'envoi d'une requête avec le Facteur, j'obtiens le résultat suivant:
Comme vous pouvez le voir, le statut de montre de 200, ce qui est OK. Mais est-ce la meilleure façon de le faire? Est-il un cas où j'aurais à définir le statut de moi-même, ainsi que le retour JSON? Ou est-ce toujours par s'exprimer?
Par exemple, je viens de faire un test rapide et légèrement modifiée de la méthode get ci-dessus:
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
if (user == null || user == 'undefined') {
res.status(404);
}
res.json(user);
});
Comme vous pouvez le voir, si l'utilisateur ne se trouve pas dans le tableau, je vais juste mettre un statut de 404.
Ressources/conseils pour en savoir plus sur ce sujet sont plus que bienvenus.
- C'est mon nominale la plus élevée de réponse et il n'est pas accepté 🙁 @dukable, je sais, ça fait un moment, mais que fait-il résolu votre problème?
- Oui, votre réponse devrait être accepté par un. Mais ce dukable utilisateur n'est pas active depuis 15 oct 2015 (sur 31 Juillet 2017). +1 pour ta réponse, de toute façon 😉
Vous devez vous connecter pour publier un commentaire.
Express de référence de l'API couvre ce cas.
Voir statut et envoyer.
En bref, vous avez juste à appeler la
status
méthode avant d'appelerjson
ousend
:res.sendStatus(400);
res.status(400).send('Not Found')
Vous pourriez faire de cette façon:
Ceci permettra de définir le code de statut HTTP de 400, elle fonctionne même en express 4.
express deprecated res.json(status, obj): Use res.status(status).json(obj) instead
Donc,res.status(400).json(json_response)
serait plus exact de nos jours.res.status(500).send({ error: "boo:(" });
statut de 200 sera la valeur par défaut lors de l'utilisation de
res.send
,res.json
, etc.Vous pouvez définir l'état comme
res.status(500).json({ error: 'something is wrong' });
Je vais souvent faire quelque chose comme...
Alors mon erreur middleware envoyer la réponse, et de faire autre chose que je dois faire quand il y a une erreur.
En outre:
res.sendStatus(status)
a été ajouté à partir de la version 4.9.0http://expressjs.com/4x/api.html#res.sendStatus
Une liste de Les Codes d'État HTTP
Les bonnes pratiques concernant le statut d'une réponse, d'une manière prévisible, envoyer le bon code d'état HTTP en fonction de l'erreur (4xx, pour le client, erreurs, 5xx pour les erreurs de serveur), quant à la réelle réponse JSON il n'y a pas de "bible", mais une bonne idée pourrait être d'envoyer (à nouveau) le statut et les données que 2 différentes propriétés de l'objet racine d'une réponse positive (de cette façon, vous donnant au client la possibilité de capturer le statut des en-têtes HTTP et la charge elle-même) et un 3ème de la propriété qui explique l'erreur de l'homme-d'une façon compréhensible dans le cas d'une erreur.
Bande de API se comporte de la même façon dans le monde réel.
c'est à dire
OK
Erreur
J'utilise dans mon Express.js application:
Le standard moyen d'obtenir la pleine HttpResponse qui comprend les propriétés suivantes
Sur le backend, cela
si vous souhaitez recevoir par exemple dans
Angular
application, il suffit de faire: