PowerShell und OData (Teil 1)

In einer dreiteiligen Serie werde ich das Zusammenspiel der PowerShell mit OData beleuchten. OData ist ein von Microsoft vor einigen Jahren initiierter Standard, der eine universelle Webschnittstelle für den Zugriff auf beliebige Daten ermöglicht, die über einen (REST-basierten) Webservice zur Verfügung gestellt werden. Über URLs werden Abfragen im Stile von SQL-Abfragen durchgeführt. Auch das Aktualisieren von Daten ist per OData möglich. Die zur Verfügung stehenden Daten werden durch ein Entitätsmodell beschrieben, so dass Abfragen auch Beziehungen zwischen den Entitäten (Tabellen) berücksichtigen können.

Teil 1 – OData im Überblick
Teil 2 – OData-Webservices per PowerShell benutzen
Teil 3 – Management OData – Cmdlets über URLs ausführen

OData ist eine Spezifikation für das Abrufen und Aktualisieren von strukturierten Daten über das Web. OData wurde 2007 von Microsoft erfunden – es entstand aus dem Projekt Astoria, aus dem später die ADO.NET Data Services wurden, die aktuell WCF Data Services heißen. OData ist der zugrundeliegende Standard der WCF Data Services.

Die Idee war es, eine universelle Datenschnittstelle für das Web zu schaffen – ein „ODBC für das Web“.

OData-Clients gibt es für alle Plattformen.

Mit der aktuellen Version 4.0 hat Microsoft die OData-Spezifikation an die OASIS-Gruppe übergeben, die als nicht kommerziell orientierte Organisation zahlreiche Standards betreut, u.a. das Open Document Format, das Konkurrenzformat zu Open XML von Microsoft. Damit ist OData ein offener Standard vergleichbar mit AtomPub (Atom Publishing Protocol) oder XML. Informationen rund um OData gibt es unter www.odata.org. Hier findet man nicht nur die offizielle Spezifikation (dies ist relativ leichte Kost und anschaulich geschrieben), sondern auch Beispielprogramme und Demo-Dienste, anhand derer sich OData-Webaufrufe ausprobieren lassen.

Einen OData-Webservice kennenlernen


Hier eine kleine Übung zum warm werden. Gib in den Browser die folgende URL ein:

http://services.odata.org/V3/Northwind/Northwind.svc/

Du rufst damit einen Demo-OData-Datendienst auf, der die Daten der Northwind-Daten zur Verfügung stellt. Das Ergebnis relativ viel Text, der alle Ressourcen aufzählt, die abrufbar sind.

Die folgende URL ruft alle Datensätze der Employees-Tabelle ab:


http://services.odata.org/V3/Northwind/Northwind.svc/Employees

Noch mehr Text. Jetzt kommt etwas OData ins Spiel, in dem von allen Datensätzen nur die Felder FirstName, LastName und City übertragen werden sollen:


http://services.odata.org/V3/Northwind/Northwind.svc/Employees?$select=FirstName,LastName,City

Wichtig: Es kommt auf die Groß-/Kleinschreibung an.

Etwas besser. Noch besser wird es, wenn die Daten im JSON-Format zurückgegeben werden:


http://services.odata.org/V4/Northwind/Northwind.svc/Employees?$select=FirstName,LastName,City&format=JSON

Damit das ganze auch wirklich funktioniert, habe ich eine subtile Änderung in der URL durchgeführt. Anstelle der Version V3 rufe ich die Version auf, die bereits auf OData Version 4 basiert, da erst hier die JSON-Unterstützung dabei ist. Ein V3-OData-Service kann mit einem „format=JSON“ nichts anfangen.

Dass mit OData „richtige“ Abfragen im Stile von SQL möglich sind, macht das nächste Beispiel deutlich, dass die ersten 10 Bestellungen des Angestellten mit der ID 1 sortiert nach der Kundennummer zurückgibt:


http://services.odata.org/V4/Northwind/Northwind.svc/Employees(1)/Orders?$select=OrderID,OrderDate,CustomerID&$orderby=CustomerID&$top=20&format=JSON

Eine Übersicht über den Aufbau einer OData-URL gibt es hier:

http://www.odata.org/documentation/odata-version-2-0/uri-conventions/

Webdaten per Powershell verarbeiten


PowerShell ist nicht nur ein Werkzeug für administrative Zwecke, sondern auch für das Abrufen von Weiterverarbeiten von Daten aus dem Web sehr gut geeignet.

Hier ein Beispiel in Gestalt einer Function, das nichts mit OData zu tun hat. Die Functions durchsucht die RSS-Feeds verschiedener Microsoft-Blogs nach einem Suchwort, das beim Aufruf der Function übergeben wird:

Das Durchsuchen der RSS-Feeds geschieht wie folgt:

Search-RSS -Keyword "DSC"

Eine solche Abfrage wäre mit anderen Skript- und Programmiersprachen bei weitem nicht so einfach und vor allem konsistent umsetzbar. Die PowerShell ist damit für das Abrufen, Aggregieren, Durchsuchen und Formatieren von Daten sehr gut geeignet.

Bei dem Beispiel geht es aber nur um das Abrufen von Daten. Mehr ist mit dieser Technik nicht möglich. Mit OData geht es einen wichtigen Schritt weiter.

Bei OData geht es um CRUD-Operationen: Create, Read, Update und Delete. Diese Operationen werden über HTTP-Verben ausgeführt.

OData-Webservices sind REST basierende Webservices, die zusätzliche Möglichkeiten bieten:

>Filter

>Auswahloptionen (z.B. Top 3)

>Einbeziehen von Beziehungen zwischen „Entititäten“ (z.B. „gib alle VMs zurück, die auf einem Server gehostet werden“)

Die Daten werden auf Wunsch im XML- oder JSON-Format zurückgegeben.

OData-Webservices sind damit REST-Webservices mit mehr Komfort.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden .