JSON Feed: Endlich ein Standard für Newsfeeds mit JSON

Schon lange hat mich die Idee umgetrieben, Newsfeeds statt mit dem etwas sperrigen XML (wie bei RSS und ATOM) lieber in JSON auszuliefern.

Nun hat Manton Reece zusammen mit Brent Simmons ebenfalls die Idee eines JSON-Newsfeeds aufgegriffen, und einen eigenen Standard entwickelt: JSON Feed.

Warum JSON und kein XML?

JSON hat mehrere Vorteile gegenüber XML. Vorneweg ist das Parsing deutlich einfacher, da JSON Sprachkonstrukte abbildet, die es in fast jeder Programmiersprache gibt: Objekte, Arrays, Strings und Zahlen. XML dagegen benötigt immer eine Form von komplexer Übersetzungsvorschrift, um Knoten, Attribute und sich wiederholende Tag-Namen als Konstrukt abzubilden.

In PHP ist das Lesen von JSON so einfach wie der Aufruf von json_decode(); in Javascript übernimmt JSON.parse() diese Aufgabe; in beiden Fällen steht danach eine schon aus dem JSON ablesbare Struktur aus Objekten, Arrays, Strings und Zahlen zu Verfügung.

Da JSON direkt durch Javascript interpretiert werden kann, kann es auch direkt vom Browser ausgeführt werden. Es entfällt die Notwendigkeit, zum Parsen des Newsfeeds auf serverseitige Skripte zurückgreifen zu müssen.

Historische Alternativen

Die Idee, einen Newsfeeds mit JSON auszugeben, gab es schon öfter:

  • JSON-RSS: Die Struktur wurde dabei von RSS übernommen, aber statt mit XML als JSON ausgegeben. Dummerweise hat sich dazu aber nie ein Standard etabliert.
  • Slack-JSON: War zwar ursprünglich nicht für Newsfeeds gedacht, erfüllt diesen Zweck aber eigentlich sehr gut. Dummerweise wurde dies aber ebenfalls nie als Standard für Newsfeeds aufgefasst und hat dementsprechend wenig Verbreitung.

Aktuelle Unterstützung

JSON Feed wird u.a. von Mantons Service micro.blog unterstützt, zudem gibt es Plugins für Wordpress, Jekyll, Movable Type und das Craft CMS. Weitere Plugins für JSON Feed entstehen in schneller Folge.

Da ich persönlich sehr an JSON als Schnittstellenformat glaube, habe ich schnell für das Blogopohon eine Option hinzugefügt, so dass alle Blogophon-Blogs auch via JSON-Feed abrufbar sind. Ein Beispiel für den JSON Feed des Blogohons findet sich hier.

Erweiterungen für JSON Feed

Der JSON Feed Standard erlaubt von vorneherein Erweiterungen. Diese sind dann zwar nicht standardisiert, können aber benötigte Funktionalität bereitstellen, ohne zu Namensraum-Kollisionen mit späteren Erweiterungen des Standards zu führen. Dies Erweiterungen funktionieren wie folgt:

Publishers can use custom objects in JSON Feeds. Names must start with an _ character followed by a letter. Custom objects can appear anywhere in a feed. […]

The about string is there for a human looking at the feed, so they can understand what goes in the custom extension. […]

JSON Feed Version 1.1

Natürlich habe ich auch gleich kleine Erweiterung für mich eingebaut:

In item existiert ein optionales GeoJSON-Geometry-Objekt, mit dem sich Koordinaten bzw. geografische Objekte übertragen lassen:

"_geo": {
  "about": "http://geojson.org/#GeometryObject",
  "type": "Point",
  "coordinates": [125.6, 10.1]
}

Zudem erlaubt mir die Verwendung des RSS-Tags, die vielfältigen Eigenschaften von RSS auch in JSON Feed zu verwenden:

"_rss": {
  "about": "http://cyber.harvard.edu/rss/rss.html",
  "copyright": "© 2008-2018 Creative Commons BY"
}

Fazit

Über die Sinnhaftigkeit von Newsfeeds wurde bereits hinlänglich nachgedacht.

JSON Feed sieht wie ein würdiger Nachfolger für RSS und ATOM aus, der an Stelle von XML das leichtgewichtige JSON verwendet. Aktuell hat JSON Feed noch nicht die selben Möglichkeiten Daten zu transportieren, und auch die Unterstützung von Feed-Readern muss erst wachsen. Für interne Schnittstellen ist dies aber allemal ein sehr guter Standard, der sich augenscheinlich auch inzwischen wie ein Lauffeuer in der Blogosphäre ausdehnt.

Update 2020–11: Da inzwischen JSON Feed Version 1.1 veröffentlicht wurde, wurde der Artikel angepasst. U.a. wurden ursprünglich als Erweiterung konzipierte Angaben für die Sprache eines Artikels jetzt direkt im Standard gelöst.