In diesem Blogbeitrag geben wir Ihnen einen ersten Überblick über das oData-Protokoll und erklären an einfachen Beispielen die Funktionsweise dahinter.
Was heißt eigentlich oData?
OData (Open Data Protocol) ist ein vom OASIS Consortium entwickeltes Protokoll für das Erstellen und Verwenden von RESTful-APIs. OData legt den Fokus auf die Abbildung der Geschäftslogik und nimmt den Entwicklern bereits eine Vielzahl von technischen Details ab.
So werden bereits Dinge wie request und response headers, status codes, HTTP-Methoden, payload-Formate und query options zur Verfügung gestellt.
Zudem gibt es Funktionen für eine Änderungshistorie sowie für wieder verwendbare Prozeduren und das Senden von batch requests.
Mit OData-Metadata steht zudem eine Art der Dokumentation zur Verfügung, die auch maschinell erfasst und verarbeitet werden kann.
OData verwendet das HTTP-Protokoll (Hyper Text Transfer Protocol) und basiert daher auf dem Client-Server-Architekturstil. HTTP verwendet ein zustandsloses Request-/Response-Protokoll, um zwischen dem Client und dem Webserver zu kommunizieren.
HTTP-Requests werden mit einer definierten Methode gesendet, welche die Aktion angibt, die für die Ressource ausgeführt werden soll. Im Folgenden sind die beiden am häufigsten verwendeten Methoden aufgeführt:
- GET - wird verwendet, um Informationen vom Server abzurufen (lesender Zugriff)
- POST - wird verwendet, um Informationen zum Server zu senden (schreibender Zugriff)
HTTP-Response-Methoden enthalten immer die eigentlichen Daten (auch Payload genannt) und einen entsprechenden Status-Code (Return Code).
Hier eine grobe Einordnung der Codes:
- 1xx: Informativ - Dies bedeutet, dass die Anfrage eingegangen ist und der Prozess fortgesetzt wird.
- 2xx: Erfolg - Dies bedeutet, dass die Aktion erfolgreich empfangen, verstanden und akzeptiert wurde.
- 3xx: Umleitung - Dies bedeutet, dass weitere Maßnahmen ergriffen werden müssen, um die Anfrage abzuschließen.
- 4xx: Client-Fehler - Dies bedeutet, dass die Anfrage eine falsche Syntax enthält oder nicht erfüllt werden kann.
- 5xx: Serverfehler - Dies bedeutet, dass der Server eine anscheinend gültige Anforderung nicht erfüllen konnte.
Im Zusammenhang mit OData fällt auch immer wieder der Begriff REST.
REST, oder auch „Representational State Transfer“ genannt, beschreibt den Architekturstil von OData. REST ist ressourcenbasiert im Gegensatz zu beispielsweise SOAP, das aktionsbasiert abläuft.
In SOAP haben Sie z. B. eine Anfrage zum Abrufen von „Materialdaten“, während im REST-Modell das „Material“ mithilfe von URI als eine Ressource identifiziert wird. Via HTTP-Methoden wird anschließend festgelegt, welche Operation darauf ausgeführt werden soll.
Die Repräsentation der Ressource ist nicht die Ressource selbst, sondern nur eine Repräsentation, die beschreibt, wie die Ressourcen in einer REST-basierten Architektur manipuliert werden.
OData v2 vs. OData v4
oData v2 ist die ältere und am weitesten verbreitete Version des OData-Protokolls.
Sie bietet:
- CRUD-Operationen (Create, Read, Update, Delete)
- Batch-Requests
- Client-seitige Filterung und Sortierung
- Datenausgabe im JSON- oder XML-Format
OData v4 ist die neueste Version des Protokolls und beinhaltet eine Menge an „Lessons Learned“, die sich mit der intensiven Benutzung von OData v2 ergeben haben.
- Bessere Performance durch Reduzierung des Payloads (Metadaten + Rückgabedaten)
- Verbesserte Datentypen
- Deutlich mehr Möglichkeiten bei der Filterung der Daten
- Angepasste Abfrage-Syntax
OData-Beispiele
Beispiel Datenmodell „Products”:
Beispiel 1
Abfrage aller Produkte, die in der Datenbank enthalten sind
https://services.odata.org/V4/OData/OData.svc/Products
Response:
Beispiel 2
Abfrage eines bestimmten Produktes anhand seines Schlüsselattributes (in diesem Fall “ID” = 1)
https://services.odata.org/V4/OData/OData.svc/Products(1)
Response:
Beispiel 3
Selektion bestimmter Produkte anhand eines bestimmten Produktattributes (In diesem Fall „Rating“ = 3)
https://services.odata.org/V4/OData/OData.svc/Products?$filter=Rating%20eq%203
Response:
Hierbei gibt es eine Vielzahl von zusätzlichen Parametern, mit der die Ergebnisliste eingeschränkt werden kann, z. B.:
- $top=2 → liefert die ersten zwei gefundenen Datensätze zurück
- $select=ID,Description → Im Antwort-Payload wird nur das Feld „ID“ und „Description” zurückgegeben.
Beispiel 4
Navigation innerhalb der Ressourcen
Das Produkt ist laut Datenmodell mit einem Lieferanten verknüpft:
Rückgabe des Lieferanten zu Produkt 1
https://services.odata.org/V4/OData/OData.svc/Products(1)/Supplier
Response:
Zusammenfassung
Das OData-Protokoll ist ein sehr flexibles und aus der heutigen Schnittstellenentwicklung kaum mehr wegzudenkendes Hilfsmittel. Es wird von zahlreichen Anbietern von APIs unterstützt und ist vor allem im SAP-Bereich unumgänglich.
Im SAP-Umfeld findet es bereits in diversen Produkten Verwendung: von SAP S/4HANA On-Premise über SAP S/4HANA Cloud bis hin zu diversen Cloud-Produkten (SAP Sales & Service Cloud, SAP SuccessFactors, uvm.).
Zudem ist das Protokoll vollständig in der Web-Entwicklung (SAPUI5) integriert, sowohl für die Datenbeschaffung als auch für die Daten-Neuanlage.
Für alle, die noch kein oData v4 verwenden: Sie sollten sich definitiv einmal mit den Neuerungen vertraut machen und überlegen, ob der Wechsel nicht eine sinnvolle Ergänzung für Ihr nächstes Projekt darstellt.