Die Website der B&B Hotels, wird von der TourismusSuite GmbH betrieben, entwickelt und ständig erweitert. Im Hintergrund arbeitet das TourismusSuite-System. Dieses ist schon seit mehreren Jahren an die Hotel-Suchmaschine trivago angebunden.

Verfügbarkeitsabfragen eines Besuchers von trivago wurden bisher über den eigenen, öffentlich zugänglichen Webservice der TourismusSuite verarbeitet. Wenn der Gast sich dort für ein B&B Hotel entschieden hat, wird er auf die Seite des angebotenen Zimmers und der Rate unter www.hotelbb.de weitergeleitet. Unabhängig davon hat trivago die Schnittstelle FastConnect spezifiziert. Nach dieser Spezifikation sollen angeschlossene Hotelbuchungssysteme verfügbare Hotels, Zimmer und Raten anbieten. Zudem ist es vorgesehen, mehrere, ganz verschiedene Hotels in einer Abfrage zu behandeln.

Wir hatten von trivago die Anforderung erhalten, auch mehrere verschiedene Hotels anbieten zu können. Bis dahin konnten wir nämlich nur die Hotels gleichzeitig anbieten, die sich in einer bestimmten Region befinden.

Es erschien uns von Vorteil, die Umsetzung nach der FastConnect-Spezifikation zu entwickeln, denn dadurch erhalten wir die Kontrolle und Verantwortung über die Details des Angebots. trivago legt also Strukturen fest, die TourismusSuite bestimmt die Inhalte.

Das bedeutet, dass die TourismusSuite jetzt mit der Umsetzung steuern kann, welche Zimmer und welche Raten trivago anbieten wird und wie die Preise zusammengesetzt sind. Diese Details mussten bisher von trivago nach Abstimmung mit der TourismusSuite realisiert werden. Ab jetzt kann dies, nach Auftrag unseres Kunden B&B Hotels, die TourismusSuite direkt steuern und durch die Qualitätssicherung auch testen.

Wir könnten z.B. bestimmte Raten - etwa Frühbucherraten oder Specialraten - bevorzugt oder aber auch gar nicht über trivago veröffentlichen lassen. Oder falls es auf der Website der B&B Hotels neue Preismodelle gibt, diese direkt auch für die Veröffentlichung über trivago umsetzen.

Spezifikation

Die FastConnect-Schnittstelle spezifiziert zwei Webservices: "Hotel Data" und "Hotel Availability".

Hotel Data

Hotel Data liefert trivago die wichtigsten Details der B&B Hotels, wie Name, Adresse, Beschreibungen und Ausstattungsmerkmale (WLAN, Parkplätze, Lift, ...).

Die Spezifikation legt die HTTP-Methode "GET" und das Adress-Muster "/hotel_data" zw. "/hotel_data.csv" fest. Bei dem ersten Muster hat trivago für die Daten in der Antwort des Webservice eine bestimmte JSON-Struktur festgelegt, bei dem zweiten Muster eine bestimmte CSV-Struktur.

Wir haben uns für JSON entschieden, da damit mehr Details übertragen werden können und dies, mit den uns zu Verfügung stehenden Mitteln, einfach umzusetzen ist.

Hotel Availability

Hotel Availability liefert trivago zu bestimmten Hotels verfügbare Zimmer, samt Preisen und Beschreibung.

Die Spezifikation legt die HTTP-Methode "POST" und das Adress-Muster "/hotel_availability" fest. Es sind Parameter (application/x-www-form-urlencoded) festgelegt, um ein oder mehrere Hotels, Anreisedatum, Abreisedatum, Zahl der Gäste, Land und Sprache, Währung, usw. an den Webservice zu übertragen.

Mit diesen Parametern führt die TourismusSuite eine Verfügbarkeitsabfrage zu den angegebenen Hotels und den weiteren Bedingungen durch.

Als Antwort werden die Informationen zu verfügbaren Zimmern in Form einer JSON-Datenstruktur gesendet.

JSON

JSON ist eine allgemeine Methode, um Daten in Textform maschinenlesbar zu übertragen oder zu speichern. Die Daten können eine komplexe hierarchische Struktur besitzen. Dazu werden die Detailinformationen mit verschiedenen Klammern, Kommata und Anführungszeichen nach festen Vorgaben strukturiert.

Die JSON-Spezifikation ist sehr einfach, hat sehr niedrige Anforderungen an Systeme und es gibt Unterstützung in verschiedensten Computersprachen. Zu Not kann man die Daten auch selbst lesen, was bei der Suche nach Fehlern nützlich ist. Im Vergleich zu XML ist sie einfacher zu lesen, besitzt aber weit weniger Anwendungsmöglichkeiten.

Umsetzung

Die beiden Webservices nutzen die bestehenden Dienste der TourismusSuite, um Daten zu Hotels und Verfügbarkeiten, Zimmern und Preisen zu erhalten. Diese Dienste wurden lediglich etwas erweitert, um verschiedene Hotels auf einmal abfragen zu können.

Sie liefern die Daten in einer Struktur, die nicht der FastConnect-Spezifikation entspricht. Daher bestand der größte Teil der Entwicklung darin, die interne Datenstruktur so zu übersetzen, dass die Daten mit der FastConnect-Spezifikation konform sind.

Dies geschieht nicht direkt in JSON-Textform, sondern über einen Zwischenschritt: wir hatten ein Gerüst aus Java-Klassen entwickelt, und dieses durch Annotationen so eingerichtet, dass das Werkzeug [FasterXML Jackson](https://github.com/FasterXML/jackson) die Daten in die spezifizierte JSON-Form übertragen kann.

Aus dem Ergebnis eines TourismusSuite-Dienstes werden die Daten also Element für Element gelesen, und damit das Zwischen-Java-Objekt-Gerüst aufgebaut. Dieses wird schließlich in das JSON-Text-Format umgewandelt.

Dieses Vorgehen erleichtert die Aufgabe sehr, da Daten manchmal in eine andere Ordnung umsortiert werden müssen, und man sich nicht um die technische Umsetzung des Themas JSON kümmern muss (dies übernimmt Jackson).

Ratenmodell

trivago veröffentlicht Hotels auf Portalen in verschiedenen Ländern. Dort sind teilweise unterschiedliche Regeln üblich, wie Preise auszuweisen sind. In Deutschland und der EU muss immer der Endpreis, den der Kunde bezahlt, ausgewiesen werden. Ausnahmsweise können bestimmte Kosten auch nicht berechnet werden, aber dann muss sehr deutlich darauf hingewiesen werden. In anderen Ländern ist es üblich, örtliche Gebühren oder Abgaben nicht auszuweisen, sondern nur die Preise des Hotels inklusive Steuern oder aber es wird nur der Netto-Preis des Hotels ausgewiesen, also ohne Steuern.

trivago spezifiziert in FastConnect also einen Parameter, mit dem diese verschiedenen Regeln umgesetzt werden können. Da das System der TourismusSuite bisher nur in der EU genutzt wird, ist dieses Thema vorerst nicht behandelt worden. So musste die Preisberechnung im FastConnect-HotelAvailability-Webservice der TourismusSuite erweitert werden, um den richtigen Endpreis, den Mehrwertsteuer-Wert und den Netto-Preis je nach Bedarf festzulegen.

Tests

Alle Entwicklungen werden natürlich getestet.

Schnelle, manuelle Tests haben wir mit dem Tool Postman durchgeführt. Damit lassen sich verschiedene Arten von Webservice-Abfragen in einer Projektverwaltung organisieren. Details einer Abfrage lassen sich durch Einführung von Variablen verallgemeinern. Somit kann man schnell verschiedene Bedingungen manuell durchtesten.

Zudem setzen wir für Unit-Tests von Webservices das Tool Jasmine ein. Dies ist eigentlich eine allgemeine JavaScript-Testumgebung. trivago stellt für erste Tests von Hotel-Availability-Webservices eine eigene Test-Suite bereit. Damit lässt sich überprüfen, ob die FastConnect-Spezifikation eingehalten wurde und ob die Struktur der Antwort zur Anfrage passt und Endpreis und Preis-Bestandteile grob plausibel sind. Der abschließende Integrationstest wurde durch die QA-Abteilung von trivago durchgeführt. Hierbei wurden die Ergebnisse verschiedener Abfragen mit unterschiedlichen Parametern auf Plausibilität geprüft und mit dem Angebot auf der Website der B&B-Hotels verglichen.

Umstellung

Da die FastConnect-HotelAvailability-Webservices eine Neuentwicklung waren, konnten sie auf den Produktionssystemen installiert werden, während das alte Verfahren, bei dem trivago Verfügbarkeiten durch den öffentlichen TourismusSuite-Verfügbarkeits-Webservice abgefragt hatte, noch in Betrieb war. Somit konnte trivago ihre Systeme ganz nach eigenem Bedarf umstellen. Die Umstellung erfolgte am 21. Juni 2018.