2016-05-16 6 views
1

herunterzuschneiden ist Mein Problem ist, dass ich zu viele API-Anfragen mache, die ich, wenn möglich, reduzieren möchte. Im Folgenden werde ich die Situation beschreiben werden:Wie API-Anfragen in AngularJS App


habe ich drei Seiten, alle ngRoute mit verlinkt sind. Wie folgt aus:

Page A: Teams (list of teams) 
    URL: "/teams" 
Page B: Team Details (list of players) 
    URL: "/teams/team-details" 
Page C: Player Details (list of player stats) 
    URL: "/teams/team-details/player-details" 

Seite A wird bevölkert von einer Reihe von Teams aus einer API zog sehr leicht eine einfache $resource.query() Anfrage und unter Verwendung ng-Repeat durch sie zu wechseln.

Seite B wird durch den Aufruf eine HTML-Vorlage aufgefüllt und Bevöl bestimmte Felder mit Werten aus einer separaten API-Anfrage zum /team-details Endpunkt, den team_id Wert aus dem klickten Elemente auf Seite A. unter

Seite C (wie bei Seite B) nimmt eine player_id von dem angeklickt Spieler auf Seite B und ruft den /player-details Endpunkt mit diesem Wert. Dies ist noch eine separate Anfrage.


Das alles funktioniert gut, aber wie man sich vorstellen kann, ein einzelner Benutzer kann ganz einfach über 100 API-Anfragen innerhalb einer Stunde Rack.

Ich habe eine Anfrage Limit von 1000/Stunde, also wenn nur 10 Benutzer online zur gleichen Zeit sind, könnte es leicht meine Grenze überschreiten und meine API geschlossen.

Wenn ich auf die API als einen einzigen Master-Endpunkt zugreifen könnte, der alle Daten und Unterdaten in einem Satz ausgibt, würde das mein Problem lösen, aber da ich separate Endpunkte anfordern muss, kann ich nicht sehen, wie das geht.

Gibt es eine bessere Möglichkeit, dies zu erreichen? Oder sind diese übermäßigen API-Anfragen der einzige Weg?

Jede Hilfe wäre willkommen.

Antwort

2

Soweit ich sehen kann, Ihr Modell für die Anwendung geeignet sieht und trifft, wie eine API-getriebene Anwendung funktionieren sollte ...

jedoch, Eine mögliche abgespeckte Sie machen können, ist einige der Ergebnisse lokal zwischenspeichern. d.h. Speichern einer lokalen Version einiger Daten, die sich wahrscheinlich innerhalb einer Sitzung nicht ändern werden. Beispiel: Wenn sich die Anzahl der Teams wahrscheinlich nicht ändert, speichern Sie die Ergebnisse einer API-Anforderung lokal und verwenden Sie diese, anstatt Daten von Ihrer API abzurufen.

Im Anschluss an diese Route können Sie bestimmte Daten nur nach einer bestimmten Zeit aktualisieren. Also, wenn ein Benutzer einige team-details angesehen hat, dann weigern Sie sich, diese Daten für die nächsten 10-20 Minuten zu aktualisieren. Dies hängt jedoch wiederum davon ab, wie zeitkritisch Ihre Daten sind.

+0

Danke. Jeder Endpunkt ist in unterschiedlichem Maße zeitabhängig. Zum Beispiel könnte der '/ teams'-Endpunkt wahrscheinlich jede Stunde aktualisiert werden. '/ team-details' und'/player-details' müssten häufiger vorkommen. Wie würden Sie wiederholte API-Anfragen innerhalb eines bestimmten Zeitraums verhindern, wie Sie vorschlagen? – Paulos3000

+0

Es ist ziemlich schwierig, diese 100% von der Client-Seite gesperrt zu bekommen. aber mein Ansatz wäre nach einer erfolgreichen Anfrage (und Cache) das Speichern eines Zeitstempels lokal.Ich gehe davon aus, dass Sie einen httpInjector für Ihre HTTP-Aufrufe an Ihre API verwenden, damit ich nach Ihrem Zeitstempel suche. Wenn der Zeitstempel Harvey

+0

Oder beim lokalen Speichern von Daten (Caching) fügen Sie den Daten einen Zeitstempel hinzu. Dann immer zuerst vom Cache anfordern. Wenn die Daten leer sind oder der Zeitstempel zu alt ist, rufen Sie die API für eine Aktualisierung auf. Ich hoffe, das hilft! – Harvey