it-swarm.com.de

REST API-Design: Mehrere Aufrufe im Vergleich zu einem einzelnen Aufruf der API

Wir entwickeln eine Rest-API für die E-Commerce-Website, die von mobilen Apps verwendet wird.

Auf der Homepage einer App müssen wir mehrere Ressourcen wie Schieberegler, Top-Marken, Bestseller-Produkte, Trendprodukte usw. aufrufen.

Zwei Optionen zum Ausführen von API-Aufrufen:

Einzelanruf :

www.example.com/api/GetAllInHome

Mehrfachanrufe :

www.example.com/api/GetSliders

www.example.com/api/GetTopBrands

www.example.com/api/GetBestSellingProducts

www.example.com/api/GetTrendingProducts

Welches ist der beste Ansatz für das Design von Rest-APIs - Einzel- oder Mehrfachaufruf, Erläutern der Vor- und Nachteile?

Welche dauert länger, um auf die Anfrage zu antworten?

20
shaijut

In der Theorie sind die mehreren gleichzeitigen Anrufe flexibler und genauso schnell.

In der Praxis ist das Ergebnis jedoch langsam und unzusammenhängend, wenn Sie eine Seite laden und dann jeden Teil dieser Seite laden und überall Spinner anzeigen, bis Sie die Ergebnisse zurückerhalten.

Aus diesem Grund sollten AJAX Datenanforderungen sparsam verwendet werden und nur dann, wenn Sie einen Abschnitt der Seite haben, der langsam geladen wird oder in einem anderen Zyklus als der Rest der Seite aktualisiert werden muss Sagen Sie eine Master-/Detailanzeige, in der Sie eine Option aus dem Master auswählen und das entsprechende Detail anzeigen möchten, ohne den Master neu zu laden.

Ein gängiges Design besteht darin, die separaten APIs für Codierungsflexibilität und Bedenken hinsichtlich des Mikrodienstes beizubehalten, aber die Datenserverseite auf der Website zu kombinieren. Damit muss der Kunde nur einen einzigen Anruf auf seiner eigenen Website tätigen. Die API-Aufrufe mit entsprechendem Caching sollten innerhalb des Rechenzentrums schnell sein.

Erwägen Sie außerdem, überhaupt KEINE Client-API-Aufrufe zu haben. Generieren Sie einfach die HTML-Serverseite. Obwohl Javascript Single Page App Frameworks Sie die API-Route entlang schieben. Dies ist normalerweise nicht der optimale Ansatz für E-Commerce-Websites mit hohem Volumen.

(enter image description here

16
Ewan

TL; DR: Abgesehen von allen anderen Anwendungsüberlegungen wäre das Ausführen eines einzelnen Anrufs schneller als das Ausführen mehrerer Anrufe. Das asynchrone Ausführen der Anrufe kann aus Sicht Ihres Benutzers die Gesamtzeit verkürzen, die zum Ausführen eines bestimmten Vorgangs erforderlich ist (was möglicherweise alles ist, was Sie benötigen). Insgesamt wäre die für mehrere Anrufe benötigte Zeit jedoch immer noch länger.

In Ihrem Fall bin ich mir jedoch nicht sicher, ob das die ganze Geschichte ist.

REST-APIs sind aufgrund verschiedener Interpretationen des Papiers, die die Idee populär gemacht haben, ein etwas mehrdeutiger Begriff. Selbst durch die liberalste Interpretation dessen, was eine REST API) ausmacht, passt das, was Sie haben, nicht wirklich.

Das Grundprinzip besteht darin, dass Sie über eine Ressource verfügen, für die Sie eine Aktion ausführen möchten. Der URI identifiziert die Ressource, an der Sie interessiert sind, und Sie würden normalerweise die HTTP-Verben verwenden, um anzugeben, was Sie mit dieser Ressource tun möchten.

In Ihrem speziellen Fall haben alle Ihre Methoden das Wort "get" im Namen. Sie sollten das in der HTTP-Anforderung verwendete Verb ändern, um anzugeben, dass Sie die an diesem Speicherort verfügbare Ressource "abrufen" möchten.

Ihr URI-Schema sollte die logische Hierarchie der Ressourcen darstellen, die Sie den Benutzern Ihrer API zur Verfügung stellen möchten. In Ihrem Fall würde ich daher die Verwendung von /api/products?category=sliders In Betracht ziehen, um Ihre Produktsammlung herauszufiltern. Dies bedeutet, dass Kunden, die alle Ihre Produkte erhalten möchten, die Abfragezeichenfolge einfach weglassen können.

5
richzilla