Bon REPOS réponse pour table vide?
Disons que vous voulez pour obtenir la liste des utilisateurs en appelant get
à api/users
mais actuellement, le tableau a été tronqué, donc il n'y a pas d'utilisateurs. Quelle est la réponse appropriée pour ce scénario 404
ou 204
?
- Je voudrais répondre à 200 et un regroupement vide (pas de vide, le corps de la réponse, mais plutôt d'un ensemble à n éléments à l'intérieur, ce sera différent selon le format retourné)
- 404 dans ce contexte serait probablement mieux adapté pour la table non trouvé". Je dirais renvoyer une liste vide.
- Double Possible de qu'est-Ce que le REPOS approprié code de réponse pour une demande valide, mais un vide de données?
- Il n'est pas. Ces deux questions sont les miens et très vieux. Ils sont similaires mais pas les doublons.
Vous devez vous connecter pour publier un commentaire.
Je dirais, ni.
Pourquoi ne pas 404 (Non Trouvé) ?
Le code d'état 404 doit être réservée aux situations dans lesquelles une ressource n'est pas trouvée. Dans ce cas, votre ressource est une collection d'utilisateurs. Cette collection existe, mais c'est pour l'instant vide. Personnellement, je serais très confus comme un auteur d'un client pour votre demande si j'ai un
200
un jour et une404
le lendemain, juste parce que quelqu'un est arrivé pour supprimer un couple d'utilisateurs. Que suis-je censé faire? Est mon URL de mal? Quelqu'un changement de l'API et de la négligence de laisser une redirection.Pourquoi ne pas 204 (Pas de Contenu) ?
Voici un extrait de la description de la 204 code d'état par le w3c
Tandis que ceci peut sembler raisonnable dans le cas présent, je pense qu'il serait également dérouter les clients. Un
204
est censé indiquer qu'une opération a été exécutée avec succès et pas de données doit être renvoyé. C'est parfait comme une réponse à unDELETE
demande ou peut-être de tir un script qui n'a pas besoin de renvoyer des données. En cas deapi/users
, vous attendre à recevoir une représentation de la collection de vos utilisateurs. L'envoi d'un corps de réponse une fois, et de ne pas envoyer les autres temps n'est pas uniforme et potentiellement trompeuse.Pourquoi je voudrais utiliser un 200 (OK)
Pour les raisons mentionnées ci-dessus (de cohérence), je serais de retour d'une représentation d'un vide de la collection. Supposons que vous êtes à l'aide de XML. Une réponse normale du corps pour un non-vide de collecte des utilisateurs pourrait ressembler à ceci:
et si la liste est vide, vous pouvez simplement répondre avec quelque chose comme ça (tout en restant à l'aide d'un
200
):De toute façon, un client reçoit une réponse du corps qui suit une certaine, bien connu format. Il n'y a pas de confusion inutile et statut code de vérification. Aussi, pas de définition de code de statut est violé. Tout le monde est heureux.
Vous pouvez faire de même avec JSON, en HTML ou en n'importe quel format que vous utilisez.
[]
.GET /singleCoin
- retours aléatoire simple pièce de monnaie de votre poche,GET /severalCoins
- retours des pièces de votre poche, vous pouvez saisir en une seule fois. Permet de dire que vous n'avez pas de pièces de monnaie dans votre poche maintenant. Lorsque vous demandez àGET /singleCoin
vous aurez404 Not Found
, mais quand vous demandez àGET /severalCoins
vous aurez200 OK
avec la liste vide[]
. Un fait - vous n'avez pas de pièces de monnaie, décrit les différentes réponses, pourquoi? Je doit dire que c'est mieux de toujours obtenir404 Not Found
, car il n'y a pas de pièces de monnaie dans votre poche.Je voudrais répondre à l'un des deux codes en fonction de l'exécution de la situation:
404 (Non Trouvé)
Cette réponse est assez correct si vous n'avez pas de table. Non seulement vide de la table, mais PAS de TABLE UTILISATEUR. Il confirme idée exacte - pas de ressource. D'autres options sont à fournir plus de détails POURQUOI votre table est absent, il y a quelques des codes plus détaillés, mais 404 est assez bon pour se référer à une situation où vous avez vraiment pas de table.
200 (OK)
Tous les cas où vous avez de table, mais il est vide ou votre demande de processeur filtrés de tous les résultats. Cela signifie " votre demande est correct, tout est OK, mais vous ne correspondent pas toutes les données, soit parce que nous n'avons pas de données ou que nous n'avons pas de données qui correspond à votre demande. Cela doit être différente de sécurité déni de réponse. J'ai aussi voter pour le retour de 200 dans la situation où vous avez quelques données et, en général, vous êtes autorisé à accéder à la table, mais n'ont pas accès à toutes les données qui correspondent à votre demande (données ont été filtrées en raison du niveau de l'objet de sécurité, mais en général, vous êtes autorisé à demander).
Si vous vous attendez à la liste de l'utilisateur de l'objet, la meilleure solution est de retourner une liste vide ([]) avec 200 OK que l'utilisation d'une 404 ou une réponse 204.
Il devrait 200 OK avec la liste vide.
Pourquoi: table Vide signifie que la table existe, mais n'ayant pas les dossiers.
404 not Found moyens demandés point de fin n'existe pas.