2016-07-27 4 views
0

Dies ist eher eine architektonische Frage.Was/Wie kann ich für meine API optimieren?

Ich entwerfe eine API (lasst es API 1 nennen) für eine mobile App, die meine API nach neuen Artikeln abfragt. Ich werde eine andere API (lasst es API 2 nennen) aufrufen, die mir den Raw-News-Feed zurückgibt.

Sie fragen, warum API 1 überhaupt benötigt wird? Nun, es wird viel Optimierung wie curate edition spezifische Nachrichten tun, formatieren Sie es so, dass es leichter und leichter für das Handy ist, das Futter zu assimilieren.

Also API 2 geben 1000+ Feeds an mich zurück und dann basierend auf meiner Kuration sagen wir 500 Feeds mit API zu senden 1. Jetzt mit Caching und alles ist alles gut für mein Backend. Das Problem liegt bei den mobilen Geräten (besonders älteren). Sie beginnen zu schwitzen mit riesigen Antworten (270kb nach Gzip).

Meine Lösung: Paginierung:

kann ich die 500 Nachrichtenartikel zu 5 * 100 Artikel aufgeteilt. Die App kann für Seite 1,2,3,4 und 5 anfordern. Potentielle Nachteile: Wenn API 1 frische Artikel sendet, ist die Aufteilung von 5 * 100 gestört. Zum Beispiel die News-Feed auf dem mobilen Gerät sehen:

Artikel 1

Artikel 2

..

Artikel 99

Artikel 100

--- -Page beendet ----

Artikel 101,

Artikel 102,

Jetzt nach API 1 Auffrischungen füttern:

New Artikel 1

New Artikel 2

Artikel 1

Artikel 2,

..

---- Seite beendet ----

Artikel 99 (doppelte),

Artikel 100 (duplicate)

Artikel 101

Artikel 102,

Was sind die besten Praktiken für ein solches Problem?

EDIT Um eine bessere Vorstellung von dem Problem, denkt an einer App ähnlich wie Neuigkeiten von Apple oder Google newstand und etwas ähnlich wie Twitter und Facebook-Feeds zu erhalten.

Antwort

1

Sie könnten jedem Artikel, z. B. einer GUID, eine eindeutige ID zuweisen und diese zusammen mit den Artikeln selbst der Benutzeroberfläche zugänglich machen. Dann würden die Anfragen der Benutzeroberfläche aussehen wie "hey API 1, gib mir die nächsten 100 Artikel nach dem Artikel #id". Dann sucht der API 1-Endpunkt im zwischengespeicherten Feed nach der angegebenen ID und ruft die nächsten 100 Artikel ab.

+0

Vielen Dank für Ihre Antwort. Aber nein, das will ich nicht. Ja, es gibt Seiten, aber diese Seiten stehen im Zusammenhang mit meiner API 1-Antwort. Die Benutzeroberfläche der App ist ein fortlaufender Scroll-Feed. Die neuesten Artikel werden nur während eines Pull-to-Refresh-Ereignisses usw. angezeigt. – GauravPandey

+0

Und bezüglich der "fügen Sie die neu gezogenen Artikel nicht zur angezeigten Liste hinzu, bis die erste Seite angefordert wird". Ich mag diesen Ansatz, jedoch wird die API 2-Antwort zwischengespeichert und sie wird alle 5 Minuten aktualisiert, und es wird kontraintuitiv sein, diese flüchtigen Daten im Speicher zu speichern. Also, wenn neue Artikel gezogen werden, muss ich nur einen Kontext pflegen, um die nächsten Artikel basierend auf meinem letzten Pull zu holen. – GauravPandey

+0

Sorry, ich konnte nicht helfen. Ich kann ehrlich gesagt immer noch kein konsistentes mentales Modell des Problems erstellen, daher sollten Sie die Problembeschreibung mit Details zur Interaktion zwischen der Benutzeroberfläche, API 1 und API 2 erweitern. –

Verwandte Themen