web-dev-qa-db-fra.com

REST Conception de l'API: plusieurs appels contre un seul appel à l'API

Nous développons une API Rest pour le site Web de commerce électronique qui sera utilisée par les applications mobiles.

Dans la page d'accueil d'une application, nous devons appeler plusieurs ressources telles que Sliders, Top Brands, Best Selling Products, Trending Products etc.

Deux options pour effectuer des appels API:

Appel unique:

www.example.com/api/GetAllInHome

Appels multiples:

www.example.com/api/GetSliders

www.example.com/api/GetTopBrands

www.example.com/api/GetBestSellingProducts

www.example.com/api/GetTrendingProducts

Quelle est la meilleure approche pour la conception d'une API de repos - appel unique ou multiple, expliquez les avantages et les inconvénients?

Lequel prendra le plus de temps pour répondre à la demande?

20
shaijut

Dans la théorie les multiples appels simultanés sont plus flexibles et tout aussi rapides.

Cependant, dans la pratique, si vous chargez une page, puis chargez chaque partie de cette page, en affichant les filateurs de chargement partout jusqu'à ce que vous obteniez les résultats, le résultat est lent et décousu.

Pour cette raison AJAX les demandes de données doivent être utilisées avec parcimonie et uniquement lorsque vous avez une section de la page qui est lente à charger ou doit être actualisée sur un cycle différent du reste de la page Dites un affichage maître/détail, où vous souhaitez sélectionner une option du maître et afficher le détail correspondant sans recharger le maître.

Une conception courante consiste à conserver les API distinctes pour la flexibilité de codage et les problèmes de micro-service, mais à combiner le côté serveur de données dans le site Web. afin que le client ne doive effectuer qu'un seul appel vers son propre site Web. Les appels d'API avec une mise en cache appropriée doivent être rapides dans le centre de données.

En outre, envisagez de n'avoir AUCUN appel d'API client. générer simplement le côté serveur HTML. Bien que les cadres d'application à page unique javascript vous poussent vers le bas de la route api. Ce n'est généralement pas l'approche optimale pour les sites de commerce électronique à volume élevé.

enter image description here

16
Ewan

TL; DR: Toutes les autres considérations d'application mises à part, effectuer un seul appel serait plus rapide que d'effectuer plusieurs appels. L'exécution des appels de manière asynchrone peut réduire le temps global nécessaire pour terminer une opération donnée du point de vue de votre utilisateur (ce qui pourrait bien être tout ce dont vous avez besoin), mais dans l'ensemble, le temps nécessaire serait encore plus long pour plusieurs appels.

Dans votre cas cependant, je ne suis pas sûr que ce soit l'histoire complète.

Les API REST sont un terme légèrement ambigu, en raison de diverses interprétations du document qui ont rendu l'idée populaire. Par l'interprétation même la plus libérale de ce qui constitue une API REST cependant, ce que vous avez ne correspond pas vraiment.

Le principe de base est que vous disposez d'une ressource sur laquelle vous souhaitez effectuer une action. L'URI identifie la ressource qui vous intéresse et vous utiliseriez normalement les verbes HTTP pour indiquer ce que vous voulez faire pour cette ressource.

Dans votre cas spécifique, toutes vos méthodes ont le mot "get" dans leur nom. Vous devez modifier le verbe utilisé dans la demande HTTP pour indiquer que vous souhaitez "obtenir" la ressource disponible à cet emplacement.

Votre schéma d'URI doit représenter la hiérarchie logique des ressources que vous souhaitez mettre à la disposition des utilisateurs de votre API, donc dans votre cas, j'envisagerais d'utiliser quelque chose comme /api/products?category=sliders pour filtrer votre collection de produits. Cela signifie que lorsque les clients souhaitent obtenir tous vos produits, ils peuvent simplement omettre la chaîne de requête.

5
richzilla