Activity Streams in der ginkgo-API

17 Feb

In ginkgo gibt es nutzer- und veranstaltungsspezifische Activity Streams, die über verschiedenste Aktivitäten auf dem Laufenden halten.

Da Activity Streams heutzutage in vielen Bereichen des Webs anzutreffen sind, sollten für dessen Aufbau allgemeingültige Standards eingehalten werden. Nur so kann der Austausch über Programmgrenzen hinweg ermöglicht werden, was natürlich das Hauptziel der ginkgo-API ist. Der Standard, der hier genutzt werden sollte, kommt von der Activity Streams Working Group: JSON Activity Streams 1.0.

Hierin besteht eine einzelne Aktivität aus einem Akteur, einer Handlung, einem Objekte und einem Ziel. Objekte und Ziele sind optional. Mit Hilfe dieser vier Bestandteilen werden Aktivitäten beschrieben:

  • Nutzer hat ein Event erstellt.
  • Nutzer hat eine Statusachricht verfasst.
  • Nutzer beginnt einem Anderen zu folgen
  • Veranstaltung veröffentlicht Call for Papers

Das in ginkgo eingesetzte streama Gem übernimmt die Erstellung und Speicherung aller Aktivitäten und sorgt auch dafür, dass ein Nutzer nur Aktivitäten sieht, die für ihn relevant sind.

Um diesen Activity Stream über die ginkgo-API verfügbar zu machen, musste ich ein paar Anpassungen vornehmen:

  • Streama verstößt bei ID-Feldern gegen die Spezifikation. Die ID MUSS eine absolute IRI sein (z.B. user:ginkgosem.com:h3vfdbfbf996dmkw34). Streama setzt dafür aber die Datenbank-ID (h3vfdbfbf996dmkw34). Also entferne ich die ID-Felder in der Repräsentation und setze stattdessen das URL-Feld mit einer absoluten URL zum referenzierten Objekt in ginkgo. Hiermit kann ein API-Konsumer auch etwas anfangen (im Gegensatz zur Datenbank-ID).
  • Dann gibt es bei type-Feldern noch eine Kleinigkeit, die aber nicht gegen die Spezifikation verstößt. Eigentlich müsste das type-Feld „objectType“ heißen und den Typ des aktuellen Objekts angeben. Nun setzt Streama hier aber als Wert den Klassennamen des aktuellen Objekts und das kann in unserem Fall auch „Users::Profile“ sein (bei Updates von Profilen). Aber laut Spezifikation darf im objectType-Feld kein Doppelpunkt enthalten sein. Also ist es das Beste, wenn das type-Feld so bleibt, wie es ist und als sogenanntes extension property angesehen wird, für das dann beliebige Werte gesetzt werden können.

Die beiden Aktivitäten im nachfolgenden Activity Stream beschreiben dementsprechend, dass der Nutzer „chris“ eine neue wissenschaftliche Veranstaltung in ginkgo angelegt hat und dass der Nutzer „fkutscher“ in einer Kurznachricht mitteilt, wann er sich mit „chris“ auf dieser Veranstaltung trifft.

{
items„:[{
actor„:{
„type“:“User“,
„username“:“chris“,
„url“:“http://127.0.0.1:3000/api/users/4f315c582a936f087b00000e“
},
target„:{
„type“:“Event“,
„name“:“Open and Social Technologies for Networked Learning“,
„acronym“:“ost2012″,
„url“:“http://127.0.0.1:3000/api/events/4f355cff2a936f10d400000c“
},
verb„:“created_event“,
„published“:“2012-02-10T19:08:00+01:00″
},
{
actor„:{
„type“:“User“,
„username“:“fkutscher“,
„url“:“http://127.0.0.1:3000/api/users/4f315c262a936f087b000006″
},
object„:{
„type“:“Micropost“,
„post“:“Treffe mich mit @chris auf der +ost2012 am 02.08.2012″,
„url“:“http://127.0.0.1:3000/api/users/4f315c262a936f087b000006/microposts/4f33e3772a936f1226000007″
},
verb„:“user_posted_status_update“,
„published“:“2012-02-09T16:17:12+01:00″
}
]
}

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: