Architektur

Client-Server-Synchronisation mit Streamdata.io

Noch 20 Sekunden. Ich bin der Höchstbietende. Den Artikel habe ich in der Tasche. 10 Sekunden. Immer noch. 3… 2… 1… perfekt, geschafft! Der Artikel gehört mir.

Warte, doch nicht? Zählt der Ebay-Countdown runter wird manch einer nervös und aktualisiert die Artikelseite lieber nicht neu. Während das heute kein Problem mehr darstellt und die Daten ohne manuelles Aktualisieren übertragen werden, war dies früher anders: um zu erfahren, ob man bei einer Ebay-Auktion Höchstbietender ist, musste man die Seite ständig neu aktualisieren.

Wieso manuelles Refreshen ein Problem ist

Ändern sich Daten im Backend-System einer App, so erreichen diese Änderungen das Frontend im Normalfall erst, sobald die Refresh-Taste des Browsers gedrückt wird.

Hätte man den Browser im Ebay-Beispiel aktualisiert, hätte man erfahren dass man nicht mehr der Höchstbietende ist. Infolgedessen möchte man also als Nutzer so schnell wie möglich Änderungen der Daten im Hintergrund mitbekommen. Dazu müssen beim Entwickeln Vorkehrungen getroffen werden: Änderungen im Backend ins Frontend pushen oder ins Frontend Änderungen pullen. Man muss sich dauernd die Fragen stellen: sind meine Daten konsistent? Kennt das Frontend die Daten zu diesem Zeitpunkt? Konsistenz ist also viel Arbeit.

API Live Streaming

Muss ich mich bei jeder Veränderung darum kümmern dass alles nochmal gepusht wird? Wäre es nicht besser, wenn das Backend bei Änderungen das Frontend automatisch anpasst?

Genau dieses Problem adressiert Streamdata.io. Es ist ein Service der sich als Proxy zwischen Client und Server erklären lässt. Hierbei handelt es sich um einen generischen Ansatz, mit dem man durch ein paar Zeilen Code eine konstante Verbindung zwischen JSON-API und Frontend herstellt und Konsistenzprobleme somit Streamdata.io überlässt. Deren Server führen Polls an das Backend durch und pushen die Daten an das Frontend weiter. Dabei werden nicht nochmal alle Daten übertragen, sondern nur die Änderungen. Das spart Rechenleistung und ist schnell.

DIE Lösung für jegliche Inkonsistenz?

Streamdata.io eignet sich gut für öffentliche API’s. Wetter, Aktienkurse, Wettquoten. Für all diese Arten von Schnittstellen bietet sich Streamdata.io als ideale Lösung mit sehr geringem Aufwand an.

Ein Problem sind private API’s. Es ist zwar möglich im Streamdata.io Portal Tokens o.ä. mitzugeben, die einen Zugriff erlauben, trotzdem will man fremden Unternehmen manchmal keinen Zugriff darauf gewähren, da es sich um Firmengeheimnisse etc. handeln könnte. Ein Extrem-Beispiel ist Deutschland. Besser gesagt der Datenschutz in Deutschland. Bei sensiblen Daten ist es gesetzlich schlichtweg nicht erlaubt diese an Dritte weiterzugeben, Streamdata.io entfällt somit als Lösungsansatz für diesen Fall.

Ein Beispiel

Schritt 1: Registrierung bei Streamdata.io

Auf Streamdata.io registrieren und Zugang zum Portal erhalten. Man erhält einen persönlichen Token.

Schritt 2: Bibliothek von Streamdata.io importieren

In meinem Fall handelt es sich um ein Angular Beispiel und das Modul wurde als Node Module vorher installiert.

Schritt 3: EventSource anlegen

Beim Anlegen muss der persönliche Token, die Backend-URL und die für die API benötigten Header mitgeben.

Schritt 4: Events abonnieren

Die JSON-API hängt jetzt an der Benutzeroberfläche und wird automatisch aktualisiert, sobald sich Daten verändern. Im Online-Portal von Streamdata.io kann man noch die Polling-Rate anpassen und manuell API’s registrieren.

Was der Spaß kostet

Streamdata.io bietet auf ihrer Homepage verschiedene Pakete an. Eine kostenlose Version steht mit 1.000.000 Anfragen an die API pro Monat zur Verfügung. Das entspricht ca. 23 Anfragen pro Minute. Die nächste der vier Preisstufen bietet schon 100.000.000 Anfragen pro Monat, was 2.300 Anfragen pro Minute entspricht. Dabei muss man in Betracht ziehen, wieviele API’s sein Backend besitzt und wieviel Polling-Anfragen man für sein System braucht. Hat man sich entschieden, so steht dem API Streaming nichts mehr im Wege.