Parse: Der Backend-as-a-Service-Anbieter im t3n-Test


Wir nehmen für euch Backend-as-a-Service-Anbieter unter die Lupe. Teil 1: Parse. (Grafik: Jan Heidemann)
Die einfachste Lösung ist, so etwas wie Apples iCloud zu verwenden. Doch leider funktioniert das nicht immer zuverlässig. Dazu kommt der wohl größte Nachteil: Man kommt nur mit iOS und Mac OS X an seine Daten. Hier kommen nun „Backend-as-a-Service“-Dienste (BaaS) ins Spiel. Hier kümmert sich eine externe Firma um die ganze Technik – wartet also die Server, stellt eine API bereit und skaliert automatisch mit.
Im besten Fall ist der Dienst plattformunabhängig und lässt sich mit allen Systemen (zum Beispiel iOS, Android, Windows Phone, REST) nutzen. Ich möchte in dieser Serie daher verschiedene BaaS-Anbieter vorstellen und vergleichen. Heute geht es um Parse. Parse ist ein Startup aus New York, das sich zum Ziel gesetzt hat, das komplette Backend für mobile Apps anzubieten. Im April 2013 wurde Parse von Facebook übernommen, wobei das Soziale Netzwerk allerdings versprochen hat, dass alles beim Alten bleibt. Parse besitzt keine eigene Server-Infrastruktur, sondern benutzt Amazons „Elastic Computation Cloud“ (EC2) mit Servern in den USA. Vielleicht wird das im Zuge der Übernahme umgestellt auf Facebooks eigene Server, das aber dürfte in jedem Fall noch einige Zeit in Anspruch nehmen.
Der Key-Value-Store von Parse
Basis von Parse ist ein einfacher Key-Value-Store. Entwickler können dort aber auch Relationen definieren und komplexe Queries formulieren. Einzelne Objekte sind mittels ACLs (Access Control Lists) geschützt und nur für bestimmte Nutzer zugänglich. So lassen sich auch einfach Daten zwischen unterschiedlichen Nutzern austauschen, indem die ACLs entsprechend gesetzt werden. Ein großer Vorteil gegenüber iCloud.
Abgesehen von simplem Text (Parse sagt, alles was sich als JSON verpacken lässt, kann gespeichert werden) können auch Dateien bei Parse abgelegt werden. Allerdings ist der Platz in der kostenlosen Version auf ein Gigabyte beschränkt. Alternativ können Nutzer aber auch zum Beispiel Bilder in der Datenbank speichern. Das hat den Vorteil, dass diese nicht von dem einen Gigabyte abgezogen werden, da der Datenbankplatz unbegrenzt ist.
Um ein Objekt zu speichern ist nur folgender Code (Objectice-C) notwendig:
PFObject *rating = [PFObject objectWithClassName:@"Rating"];
[rating setObject:[NSNumber numberWithInt:1] forKey:@"stars"];
[rating saveInBackground];
oder wer kein Objective-C kann, hier die Android (Java)-Version:
ParseObject rating = new ParseObject("Rating");
rating.put("stars", 1);
rating.saveInBackground();
Zum Debuggen und Ansehen/Ändern der gespeicherten Daten gibt es eine Weboberfläche.

So sieht der „Parse Data Browser“ aus. (Screenshot: Parse)
Parse kann auch Push-Nachrichten
Zusätzlich zur Datenspeicherung bietet Parse auch das Versenden von Push-Nachrichten an. Das funktioniert mit iOS, Android und Windows Phone. Die Nachrichten lassen sich über die Webseite oder die API versenden, wobei Parse zwischen allen Nutzern einer App, einer Teilgruppe (sogenannten Channels) und einem spezifischen Nutzer unterscheidet, denen man Push-Nachrichten schicken kann. Denkbar wären etwa in einer News-App verschiedene Rubriken als Channels abonnierbar zu machen. Serverseitig schickt man nun die Push-Nachrichten über die entsprechenden Channels und Parse erledigt den Rest automatisch.
Man kann auch die Plattform auswählen und so zum Beispiel nur Nachrichten an Windows-Phones schicken. In der Pro-Version kann das noch spezifischer eingestellt werden. Man kann auch eine Lebensdauer einer Push-Nachricht festlegen. Ist der Client während dieser Zeitspanne nicht erreichbar, wird die Nachricht verworfen und nie zugestellt.

Die Push-Nachrichten-Konsole von Parse. (Screenshot: Parse)
Als kostenpflichtiges Upgrade bietet Parse auch das zeitversetzte Senden der Push-Nachrichten über die Webseite an. Sogar mit Zeitzonenunterstützung (Beispie: Sende eine Nachricht an alle um 10 Uhr lokaler Ortszeit). Allerdings lässt sich das auch über die API lösen, in dem man sein externes Kommando erst zu einer definierten Zeit die API-Anfrage senden lässt.
Bei jedem Parse-Zugang dabei ist eine Statistik, die zeigt, wie oft die App geöffnet wurde. Kostenpflichtig gibt es auch noch Analysen – beispielsweise über die Aufrufe der Push-Nachrichten.

Parse bietet etliche Statistiken an. (Screenshot: Parse)
Auf der nächsten Seite lest ihr, wie ihr mit Parse ganz einfach Logins realisieren könnt und was die Server-Code-Laufzeitumgebung Cloud Code kann.
Parse: Simple Logins
Logins lassen sich mit Parse recht simpel realisieren – entweder traditionell mit Benutzernamen und Passwort oder per Facebook und Twitter und das, ohne, dass man sich extra mit der Facebook- oder Twitter-API beschäftigen müsste. Es wird automatisch ein Benutzer angelegt und das Einloggen auf allen Geräten erlaubt.
Parse bietet sogar ein fertiges Login-Formular an, das man in seine App einbauen kann. Ein Google-Login beziehungsweise ein allgemeiner OAuth-Login sind nicht verfügbar und es ist fraglich, ob dieser nach dem Kauf durch Facebook noch eingebaut wird. Allerdings kann man ihn selbst in seine App einbauen und manuell einen Nutzer anlegen.
Parse: Cloud-Code
Die Server-Code-Laufzeitumgebung Cloud Code ist im letzten Jahr hinzu gekommen. Cloud Code basiert auf node.js, wird also mittels JavaScript programmiert. Ziel von Cloud Code ist es, Programmlogik auf den Server auszulagern. Man kann Cloud Code zum Beispiel beim Speichern von Daten im Key-Value-Store ausführen und damit Daten validieren. Oder aber man verschickt serverseitig Mails, wenn etwas gespeichert wird. Alternativ kann man diese Cloud-Code-Funktionen auch direkt aufrufen und damit Aktionen auslösen.
Ein Anwendungsbeispiel: Der Server lädt Daten von einem externen Dienst, formatiert sie und der Client lädt sie im passenden Format herunter. Kleiner Wermutstropfen: Der Code darf maximal 15 Sekunden laufen. Man sollte sich also kurz fassen. Auch sind nicht alle JavaScript-Bibliotheken verfügbar, das populäre jQuery beispielsweise fehlt. Der Grund ist einfach: Cloud Code läuft nicht im Browser, hat also auch keinen Zugriff auf viele Browser-Methoden, die zum Beispiel jQuery nutzt. Aber für viele Problemstellungen lässt sich auch mit nacktem JavaScript eine Lösung finden. Zusätzlich gibt es sogenannte Module, die die Funktionalität erweitern – etwa zum Senden von SMS, dem Bezahlen mittels Stripe, der Bilderkennung oder Bildbearbeitung (Skalieren, Konvertieren, Thumbnail-Generierung). Man kann auch eigene Module schreiben und einbinden. Mit ein wenig Anpassung gehen aber auch manche node.js-Module wie beispielsweise ein RSS-Parser. Dazu gibt es seit kurzem auch eine eingebaute Cron-Funktion, mit der man Cloud-Clode-Funktionen timen oder regelmäßig ausführen kann.

Mit Parse lassen sich via Cloud Code auch Jobs timen. (Screenshot: Parse)
Webhosting bei Parse
Will man komplett auf einen eigenen Server verzichten, kann man seine Webseite auch bei Parse hosten lassen. Allerdings gibt es dort kein PHP, sondern man ist auf JavaScript und Parses Cloud Code angewiesen. Es steht das node.js-Web-Framework Express zur Verfügung. Eine eigene Domain anstelle einer Parse-Subdomain zu verwenden, ist allerdings kostenpflichtig.
Der Preis: Was kostet Parse?
In der Grundversion ist Parse kostenlos und erlaubt damit die unbegrenzte Speicherung im Key-Value-Store, ein Gigabyte Dateien, eine Million API-Requests und eine Million Pushes pro Monat (maximal 20 gleichzeitige API-Requests pro Sekunde). Verbraucht man mehr, werden sieben Dollar-Cent je weiterer 1.000 Requests beziehungsweise Pushes fällig, dazu kommen 20 Dollar-Cent pro weiterem Gigabyte Speicherplatz.
Alternativ kann man ein Pro-Paket buchen, das mit 199 Dollar im Monat nicht ganz günstig ist, dafür aber auch 15 Millionen API-Requests, fünf Millionen Push-Nachrichten, 40 API-Requests gleichzeitig sowie zehn Gigabyte Speicherplatz bietet. Dazu gibt es noch Statistiken, Push-Nachrichten-Zeitplanung und ein Branding der E-Mails für Passwort-Resets. Enterprise-Kunden können ein individuelles Angebot bekommen, in dem auch schnellere und bessere Server, Telefonsupport, Service-Level-Agreements und weitere verhandelbare Funktionen enthalten sind.
Fazit

85 Millionen US-Dollar soll Parse Facebook wert gewesen sein. (Screenshot: parse.com)
Für iOS-Entwickler ist Parse momentan die umfassendste und einfachste Lösung. Man darf sich nur nicht daran stören, dass der Dienst Facebook gehört und die Daten ausschließlich in den USA bei Amazon gespeichert werden. Je nach App-Zielgruppe ist ein Server-Standort in Deutschland vielleicht besser – allein aus Geschwindigkeitsgründen. Im Allgemeinen dürften aber mehr Nutzer in den USA sitzen als hier. Wer Angst vor der NSA hat, sollte von Parse ebenfalls Abstand nehmen. Die Verbindung zu Parse ist zwar SSL-verschlüsselt, die Daten liegen allerdings unverschlüsselt auf den Servern.
Parse in seine App einzubauen, ist sehr einfach – dabei helfen auch die umfangreiche Dokumentation, die Tutorials und nicht zuletzt Videos (bisher, aktuell) und ein Forum. Ich persönlich habe gute Erfahrungen mit Parse gemacht. In meiner iOS-/Mac-App Home Remind verwende ich ihr Backend, um Erinnerungen von der iOS-App zum Mac-Pendant zu bekommen. Anfangs gab es noch kein Mac-SDK, sodass ich dort per REST mit Parse kommuniziert habe (was auch völlig problemlos und einfach funktioniert). Mittlerweile nutze ich dort aber auch das mittlerweile vorhandene Mac-SDK.
Und welche Erfahrungen habt ihr mit Parse gemacht? Ich freue mich auf eure Kommentare!
5 Sterne von mir!
Könntet ihr den Artikeln eigentlich ein Datum anfügen? Ich bin auf diese Seite via Google gestoßen – und man hat keine Ahnung wie alt der Artikel eigentlich ist (nur auf der ersten Seite steht das, oder?)
Ja, das steht nur auf der ersten Seite oben rechts unter der Autoreninfo.