Erste Praxiserfahrungen mit Backend as a Service

Know-how  –  2 Kommentare

Ein umfangreicher Vergleich der wichtigsten BaaS-Anbieter ist kaum leistbar, dafür ein testweises Implementieren ausgewählter Dienste. Für einen Test wurden die BaaS-Provider Kinvey, Parse, Windows Azure Mobile Services und apiOmat ausgewählt. Er soll einen Querschnitt zwischen etablierten Playern, bekannten Softwarekonzernen und auch einem deutschen Anbieter mit leicht anderem Ansatz abdecken.

Alle untersuchten Backend-as-a-Service-Anbieter haben eines gemeinsam: Neben den mittlerweile obligatorischen iOS- und Android-SDKs bieten sie noch eines für die Entwicklung mit HTML und JavaScript an. Damit können Web- oder Webapp-Entwickler schnell Daten persistieren. Für die folgende Vorstellung der ausgewählten Anbieter wird daher das jeweilige Web/HTML5-SDK genutzt. Damit nicht deren Beispiele zum Einsatz kommen, soll bewusst ein einfaches Datenobjekt "Person" implementiert werden. Eine Person hat immer die drei Eigenschaften "Vorname", "Nachname" und "Alter".

Mehr Infos

Im Folgenden demonstriert der Autor das generelle Vorgehen für den Umgang mit Daten in Codeteilen anhand der ausgewählten BaaS-Angebote. Dabei implementiert er in den jeweiligen JavaScript-Funktionen init(), store(), fetch() und query() Folgendes:

  • Bei init() wird das notwendige Bootstrapping der BaaS-Anwendung implementiert. Was ist also vorher zu laden beziehungsweise zu konfigurieren, um den Baas-Anbieter zu nutzen.
  • store() sorgt für das Speichern der Person "Max Mustermann".
  • fetch() holt genau einen Datensatz.
  • query() versucht, alle Personen mit dem Vornamen "Max" vom BaaS zu beziehen.

Durch das Vorgehen lässt sich der jeweilige Codieraufwand bei den verschiedenen Anbietern gut vergleichen.

Kinvey ist das dienstälteste Unternehmen im Bereich BaaS. Der Service bleibt bis zu einer Anzahl von 100 Nutzern kostenfrei. Wenn es mehr werden, ist ein größeres Paket zu beziehen. Als Speicherplatz sind im freien Paket 2 GByte Gesamtvolumen vorgesehen. Alles, was über diese Begrenzungen hinausgeht, wird in weiteren kostenpflichtigen Paketen angeboten. Das kostenfreie Paket reicht aber für den Start aus, zum Beispiel für Highscores oder Speicherstände einer App. Auch für die beliebten To-do-Listen genügt der Platz erst einmal.

Um den Dienst zu nutzen, ist eine Registrierung notwendig. Danach gibt man den Namen seiner ersten App an. Dabei fragt der Dienst nach der ersten primären Ziel-Plattform. Das ist in diesem Beispiel HTML5. Kinvey erstellt danach eine Dashboard-Seite, die die Anwendungskennzahlen, aktive Nutzer und API-Aufrufe sowie die vom System generierten API-Keys anzeigt. Letztere werden im Folgenden noch benötigt. Für den Einsatz des Backends fehlt nur noch eine JavaScript-Bibliothek. Diese steht generisch zur Verfügung. Für die Einbindung in die bestehende HTML-Anwendung genügt die folgende Zeile:

<script src="//da189i1jfloii.cloudfront.net/js/
kinvey-html5-1.1.1.min.js"></script>

Damit ist die 65 KByte große Bibliothek geladen und zum Einsatz bereit. Darauf wird mit Kinvey.init() der Dienst mit den API-Schlüsseln initialisiert. Das stellt sicher, dass andere Kinvey-Nutzer nicht auf dieses Backend zugreifen können, obwohl sie dieselbe JavaScript-Bibliothek verwenden. Zusätzlich arbeitet man immer mit einem sogenannten ActiveUser, der die Aktionen ausführt. Daher sollte man bei der Initialisierung notfalls einen Nutzer anlegen, so er denn nicht vorhanden ist.

Die Kinvey.ping-Funktion gibt dem Entwickler die Sicherheit, dass der Backend-Dienst läuft und die Verbindung herstellt – etwa vergleichbar mit einem Ping bei TCP/IP, aber auf Anwendungsebene.

Zum Speichern der Daten wird der Namespace Datastore von Kinvey genutzt. Dabei werden die Funktion save() aufgerufen und hier als Erstes ein sogenannter Collection-Name angegeben, also was für eine Art Liste oder Sammlung hier gespeichert wird. Das Konzept ist vergleichbar mit dokumentenorientierten Datenbanken wie MongoDB. Danach übergibt man ein Objekt mit den Werten _id und den Eigenschaften des Personen-Objekts.

Damit fungiert _id als eindeutiger Schlüssel für den Datensatz. Die weiteren Eigenschaften werden als einer von vielen Schlüssel/Wert-Paaren dem Dokument zugeordnet. Braucht man also in Zukunft eine neue Eigenschaft, lässt sich diese einfach im Code mit angeben. Dieser Ansatz ist für Webentwickler mit dem LocalStorage-Konzept moderner Browser vergleichbar.

Für das Beziehen von Daten gibt es mehrere Möglichkeiten. Ist die _id des Dokuments bekannt, wird mit Kinvey.DataStore.get() ein direkter Zugriff erfolgen. Sollen alle Dokumente nach einem Wert eines Schlüssels durchsucht werden, funktioniert die Abfrage per Kinvey.Query(). Sie ist auch beliebig komplexer möglich. Die Vergleichsoperatoren sind hierbei:

  • ist gleich =
  • größer als >
  • größer als oder gleich >=
  • kleiner als <
  • kleiner als oder gleich <=
  • ungleich !=
  • ist ein Wert vorhanden exists
  • Vergleich mit regulärem Ausdruck per matches

Damit lässt sich dann per Chaining, also dem verketteten Aufrufen in JavaScript, auch eine komplexere Abfrage erstellen.

var query = new Kinvey.Query();
query.greaterThanOrEqualTo('rate', 25).lessThanOrEqualTo('rate', 50);

Das soll als einfacher Einstieg reichen. Darüber hinaus bietet Kinvey nicht nur das Speichern und Lesen von Daten an. Es gibt noch Komfortfunktionen wie Offline-Caching und das Synchronisieren von Daten, und eine serverseitige Logik ist ebenfalls möglich. Damit lassen sich Daten beispielsweise auf dem BaaS-Server verarbeiten. Komfortmodule für Analytics oder Push-Dienste sind auch vorhanden. Das Aufsetzen mehrerer Backend-Systeme ist zusätzlich realisierbar, also ein Unterscheiden von Produktiv-, Test- und Entwicklungssystem. In der kostenfreien Version gibt es nur das Livesystem.

Wer nicht schrittweise implementieren möchte, sondern ein fertiges Projekt bevorzugt, kann von Kinvey etwa das "Bookshelf"-Beispiel auf GitHub klonen und damit arbeiten.

Hier geht's zum BaaS-Komplettbeispiel für Kinvey.