Philipp Friberg itelligence Schweiz AG

Es gibt verschiedene Methoden, um einen OData-Service zu implementieren. Je nach Bibliothek nehmen sie uns dabei mehr oder weniger Arbeit ab.

Im ersten Teil dieser zweiteiligen Artikelreihe habe ich den OData-Standard für RESTful APIs vorgestellt. Mittels OData ist die Objektadressierung, Suche, Filterung oder die Abbildung eines Objekts definiert. In diesem Teil möchte ich nun zeigen, wie solche OData-Services erstellt werden können. Dazu stelle ich die Bibliothek Apache Olingo und den SAP-Frontend-Server vor.

Ein API-Standard bringt nichts, wenn es keine Implementierungen davon gibt. Tatsächlich ist es eigentlich erst ein Standard, wenn es mehrere Implementierungen gibt. Das ist bei OData der Fall; eine Übersicht über die Implementierungen für Java, .NET, JavaScript, C++ und weitere Plattformen ist auf der OData-Seite zu finden. Ich stelle nachfolgend Apache Olingo vor – eine Bibliothek, um in Java einen OData-Service zu implementieren, die auch von großen Unternehmen wie SAP eingesetzt wird. Die Bibliotheksversionen sind sich im Großen und Ganzen sehr ähnlich. Ich stelle deshalb das Grundprinzip vor; Details und Tutorials gibt es auf deren Homepage.

Apache Olingo

Es gibt drei Versionen von Apache Olingo: eine für die OData-Implementation der Version 2, eine für die Version 4 und eine JavaScript-Bibliothek. Als Erstes stelle ich das Grundprinzip anhand der Bibliothek in Version 4 vor. Weiter unten gehe ich dann noch auf die Version 2 ein.

In den Beispielen auf der Olingo-Homepage läuft der Service auf einem Tomcat-Server. Für das Build-Management wird Maven verwendet. Ich nutze als Codebeispiel das Beispiel aus der Olingo-Dokumentation, dort ist auch eine Click-by-Click-Anleitung dabei. Deshalb gehe ich nicht weiter auf Tomcat und Maven ein, sondern beschränke mich hier auf die OData-spezifischen Aspekte. Unser Beispielservice beinhaltet Produkte. Dazu schauen wir uns die Metadaten an (Listing 1).

<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
  <edmx:DataServices>
    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="OData.Demo">
      <EntityType Name="Product">
        <Key>
          <PropertyRef Name="ID"/>
        </Key>
        <Property Name="ID" Type="Edm.Int32"/>
        <Property Name="Name" Type="Edm.String"/>
        <Property Name="Description" Type="Edm.String"/>
      </EntityType>
      <EntityContainer Name="Container">
        <EntitySet Name="Products" EntityType="OData.Demo.Product"/>
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>

In der Regel selektieren wir ein Set von Entitäten oder eine spezifische Entität mit einem Schlüssel. Bei dieser Selektion gibt es zwar Selektionsparameter wie z. B. Filter, aber schlussendlich sind die Entität und deren Set das zentrale Herzstück. Ein weiterer Angelpunkt sind die Metadaten der Entitäten. Also müssen wir diese zwei wesentlichen Teile irgendwo implementieren. Starten wir mit der Servicedefinition.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Entwickler Magazin 5.17 - "Python"

Alle Infos zum Heft
579808306RESTful APIs mittels OData erstellen
X
- Gib Deinen Standort ein -
- or -