Nach einer komplexen Daten-Migration sowie der Implementierung von vielen Kunden-spezifischen FunktionalitĂ€ten, gingen wir live. Anfang 2021 war der neuen Webauftritt von ZĂŒrich Tourismus aufgeschaltet. Mit dabei war die erste Version einer Open Data Schnittstelle. Dank dieser Schnittstelle ist es Partnern möglich, aktuelle Daten von der Website zu konsumieren.

Konzeption der Schnittstelle in Drupal 9

Die Schnittstelle bestand auf Drupal 7 - nun heisst es ablösen. Die Anforderungen des Kunden waren klar: wir sollten die Schnittstelle möglichst Ă€hnlich nachbilden und in Drupal 9 statt Drupal 7 implementieren. Die Struktur der Daten muss Schema.org unterstĂŒtzen, weshalb diese Schnittstelle in Drupal 7 auf die BedĂŒrfnisse von ZĂŒrich Tourismus massgefertigt wurde.

FĂŒr die Entwicklung der neuen Open Data Schnittstelle wollten wir möglichst viele FunktionalitĂ€ten der Drupal Community verwenden. Das hilft, die Maintainability und die QualitĂ€t hoch zu halten und natĂŒrlich Zeit zu sparen.

Es gibt verschiedene AnsÀtze um eine solche Schnittstelle zu bauen. Und wie so oft, haben alle AnsÀtze ihre pros und contras.

Ansatz 1: Verwendung von bestehenden Normalisierungs-Modulen

In Drupal gibt es mehrere Module, die bereits ein Ă€hnliches BedĂŒrfnis abdecken, wie z.B. das Core-Modul JSON:API. Diese Module sind sehr generisch implementiert. So werden möglichst alle Felder der EntitĂ€ten normalisiert . Braucht man jedoch eine komplett andere Struktur oder bei gewissen Feldern noch zusĂ€tzliche Logik, muss in Anpassungs-Arbeit investiert werden. Dazu kommt, dass diese Module meist viel mehr FunktionalitĂ€ten bereitstellen als schlussendlich wirklich gebraucht werden. Das senkt die FlexibilitĂ€t und wegen den vielen nicht verwendeten FunktionalitĂ€ten schwindet auch die Übersichtlichkeit.

Ansatz 2: Massgefertigte Normalisierung in Kombination mit dem RESTful Web Services Modul

Ebenfalls ein Drupal Core-Modul ist das RESTful Web Services Modul. Mit diesem Modul können, mit geringem Aufwand, REST Schnittstellen in ein Drupal Projekt integriert werden. Die Open Data Schnittstelle mittels diesem Modul zu implementieren heisst viel Aufwand, da auch die ganze Normalisierung selbst gemacht werden muss. Andererseits ist die FlexibilitĂ€t sehr hoch, da alles selbst implementiert wird. Durch die gewonnene FlexibilitĂ€t steigt auch die Möglichkeit, die Implementierung ĂŒbersichtlich und nachhaltig zu realisieren.

Umsetzung

Die Normalisierung erreichen wir mittels einer Normalizer-Klasse, welche Drupal EntitÀten in die von uns erstellte Modell-Klassen transformiert. Die Modell-Klassen bilden dabei die Typen von Schema.org ab. Am Beispiel einer EntitÀt des Node-Typs Place, zeigt die folgende Grafik den Prozess. Der Model Typ entspricht in diesem Fall LocalBusiness.

Durch die Verwendung dieser Modelle, wird die Zuweisung und die Transformation voneinander abgekapselt. Und durch eine toArray Funktion auf der Model-Klasse ergibt sich die volle Kontrolle, wie Daten serialisiert werden.

Die Open Data Schnittstelle im Einsatz

Die Partner können die Open Data Schnittstelle mit einem REST-fÀhigen Client anbinden und so ihre Daten synchronisieren.

Auf der Übersichtsseite welche unter https://www.zuerich.com/en/data zu finden ist, erscheinen Kategorien von LokalitĂ€ten und Übernachtungsmöglichkeiten. Möchte man nun alle Gastrobetriebe von zuerich.com beziehen, kann man ĂŒber einen Query-Parameter die Kategorie-ID mitgeben.

https://www.zuerich.com/en/data?id=74

Das Hotel Schweizerhof ZĂŒrich verwendet so ihre Daten fĂŒr die Seite https://www.hotelschweizerhof.com/en/concierge-service/gastronomy.