2016-11-07 3 views
1

Supposons que le client demande GET pour/items/color/{color}Conception de l'API RESTful. Lorsque la requête est accompagnée d'un filtre, devez-vous également renvoyer les valeurs de ce filtre?

Lorsque le serveur renvoie un tableau d'objets ayant cette couleur, est-ce que chaque objet élément doit avoir une propriété de couleur ou non?

Le client connaît la couleur des articles retournés car il a demandé cette couleur. Le serveur doit-il essayer de réduire ou de réduire la taille de la réponse?

EDIT: Les utilisateurs peuvent-ils toucher davantage à la sauvegarde de la bande passante? S'il est préférable de renvoyer la totalité de la ressource, les réponses peuvent-elles indiquer pourquoi il est préférable de renvoyer la totalité de la ressource par rapport à l'économie de la bande passante, plutôt que la seule raison pour laquelle la ressource entière doit être renvoyée.

Répondre

2

En général (du moins, c'est l'idée de REST telle que je la comprends), le résultat de la requête doit toujours être ressource complète. Si l'élément contient un membre color, il n'y a aucune raison de supprimer ce membre dans le résultat. Cela contredirait le concept de ressources de REST. Une ressource ne change pas ses propriétés. La suppression des membres ne serait pas seulement inattendue, elle pourrait même casser le client quand il attend réellement ce membre.

Supposons que le client dispose de fonctionnalités pour analyser le résultat de votre appel REST sans filtre. Tous les champs seraient retournés et le client analyserait tous les champs. Maintenant, le client demande exactement les mêmes ressources (item), mais soudainement les champs sont différents - le code d'en haut pour analyser le résultat ne peut pas être réutilisé.

Aussi, quand on y pense, c'est probablement plus de travail pour supprimer ce membre que de simplement le retourner.

+0

Eh bien, vous auriez de la documentation. Si vous décrivez ce comportement et qu'il est cohérent dans votre API, ce ne serait pas vraiment inattendu, non? En outre, qu'en est-il de la sauvegarde de la bande passante, pouvez-vous y répondre? Cela n'a pas d'importance? Dans le développement web, les gens se soucient vraiment de chaque kb, ce qui rend la taille de la réponse plus petite et donc l'application plus rapide semble être important. La différence serait évidemment d'autant plus grande que le plus grand tableau est retourné et plus il y a de filtres, je pense que dans certains cas cela pourrait être vraiment significatif. Répéter la même information que le client connaît déjà dans chaque objet semble inutile. – Erndob

+0

Une ressource doit contenir les mêmes champs, quelle que soit la façon dont elle est obtenue, filtrée ou non. C'est comme ça que je comprends REST. Bien sûr, vous êtes libre de mettre en œuvre tout ce que vous voulez. La taille compte, mais votre exemple économise quoi - 20 octets? Ce que je ferais est: permettre au client de spécifier les champs qui devraient être retournés. Dans ce cas, le client est responsable de la sauvegarde de la bande passante. –

1

Il n'y a pas de réponse "correcte", cela dépend de la conception générale de l'API et devrait être votre décision.

Je suis d'accord avec Thorstens commentaire que vous devriez retourner la ressource entière - c'est proche de l'idée générale REST. Pendant que vous faites cela, vous pouvez également implémenter un mécanisme de choix des champs comme dans l'API FB: voir la section «Choix des champs» de this paragraph.

0

Vous devriez conserver la couleur dans la réponse. Il y aurait plusieurs raisons à cela:

  • Vous assurez-vous que ce que vous avez demandé est ce que vous obtenez
  • S'il y a plusieurs éléments de différentes couleurs dans la page, vous ne laissez pas le client à prendre soin de "filtrer" les éléments en fonction des couleurs
  • Vous avez une réponse plus "sécurisée". Par exemple, le client demande une couleur bleue, mais un script malveillant manipulera cette réponse sous la forme d'éléments rouges.
+0

pourquoi le client refilterait-il la réponse? il a été filtré côté serveur et le client s'attend à ce que tous les éléments retournés soient "rouges", sinon le code serveur est rompu – Yazan

+0

Vous n'avez pas besoin de retreindre la réponse, mais le client a la responsabilité de savoir de quelle couleur sont les éléments. réponse. –

+0

le client enverra déjà les données de filtre dans l'url '.../items/red', ainsi le client ne doit pas re-vérifier la réponse (est-ce que j'ai demandé?) – Yazan