«

»

Apr 16 2012

eZ Publish und die REST Schnittstelle

Mit eZ Publish 4.5 bzw. der 4.2011 Community Edition wurde auch eine neue Erweiterung eingeführt: Die REST-Schnittstelle. Damit ist ein einfacher, standardisierter und erweiterbarer Zugriff auf eZ-Inhalte von anderen Anwendungen aus möglich. Insbesondere ist die neue Schnittstelle für mobile Endgeräte gedacht. 

Die erste Einrichtung besteht aus dem Aktivieren der ezprestapiprovider-Extension, Einstellen der Rewrite-Regeln für den Zugriff auf die index_rest.php und Vergeben der entsprechenden Rechte an die gewünschten Rollen und/oder Benutzer. Danach steht die REST-Schnittstelle im Standardumfang zur Verfügung. Man kann damit Nodes und Objekte in verschiedenen Sprachen abrufen und bei Bedarf auch nur deren einzelne Felder. Als Standard ist die Authentifizierung via OAuth 2.0 eingestellt, wofür die erlaubten Endpoints noch über das eZ-Backend konfiguriert werden müssen (Reiter SetupoAuth Admin). Alternativ gibt es noch “Basic Auth” oder man kann die Schnittstelle für jedermann freigeben.

Hat man alles richtig konfiguriert, kann man mit folgendem Schema Anfragen an den Server stellen:

GET|POST|PUT|DELETE <HOST:PORT>/<prefix>/<provider>/<version>/<call>/<params>/

Die Teile des Schemas haben folgende Bedeutungen:

HTTP-Methode
Momentan werden von der Standard-Extension nur GET Anfragen unterstützt. POST|PUT|DELETE sollen in einer der nächsten eZ-Versionen folgen. Natürlich kann man bei eigenen REST-Funktionen auch die anderen HTTP-Methoden benutzen. Zum Thema POST oder PUT für das Anlegen von neuen oder Ändern von bestehenden Daten gibt es rege Diskussionen, die zu keinem wirklichen Schluss kommen. Das ist also Geschmackssache.
prefix
Das Prefix wird in den Rewrite-Regeln festgelegt und gilt für alle REST-Anfragen.
provider
Der Provider der hauseigenen Extension ist “ezp“. Eigene Erweiterungen müssen einen anderen Provider benutzen, da ein Provider immer 1:1 mit einem MVC-Router verbunden ist.
version
Jede REST-Methode kann für Abwärtskompatibilität mehrere Versionen haben. Diese werden auch im MVC-Router definiert.
call
Das ist der eigentliche Methodenname.
params
Jede REST-Methode kann verschiedene durch einen Slash getrennte Parameter annehmen. Selbstverständlich kann man auch Parameter bei POST|PUT-Aufrufen separat mitgeben oder als GET-Parameter mitgeben. Generell gilt: Parameter zur Identifizierung des zu bearbeitenden Subjekts gehören hier hinein, alles andere sollte auf anderen Wegen übermittelt werden.

Der in eZ integrierte ezpRestApiProvider bietet im Detail folgende REST-Methoden:

GET /api/ezp/v1/content/object/[objectID]
Meta-Daten, Orte und Felder des gewünschten Objekts; Mehr…
GET /api/ezp/v1/content/node/[nodeID]
Meta-Daten und Felder des gewünschten Knotens; Mehr…
GET /api/ezp/v1/content/node/[nodeID]/fields
GET /api/ezp/v1/content/object/[objectID]/fields
Alle Felder (Werte, Typen, IDs) zu dem gewünschten Objekt oder Knoten; Mehr…
GET /api/ezp/v1/content/node/[nodeID]/field/[fieldID]
GET /api/ezp/v1/content/object/[objectID]/field/[fieldID]
Daten (Wert, Typ, ID) zu einem bestimmten Feld des gewünschten Objekts oder Knoten; Mehr…
GET /api/ezp/v1/content/node/[nodeID]/list/offset/[…]/limit/[…]/sort/[…]/[…]
Meta-Daten und Felder der Kind-Einträge des gewünschten Knotens; Mehr…
GET /api/ezp/v1/content/node/[nodeID]/childrenCount
Anzahl der Kind-Einträge des gewünschten Knotens; Mehr…

Die Antworten auf die Anfragen kommen im JSON-Format. Per Parameter kann man auch XML-Antworten erhalten. Eine Beispielanfrage sieht zum Beispiel so aus:

Anfrage:

GET /api/ezp/v1/content/node/2/list
Authorization: OAuth 0123456789abcdef…
Accept: application/json

Antwort: (Auszug)

"childrenNodes": [ {
        "objectName": "Awards",
        "classIdentifier": "subcategory",
        "datePublished": 1302091069,
        "dateModified": 1307614988,
        "objectRemoteId": "d003…3e94",
        "objectId": 1203,
        "nodeId": 1257,
        "nodeRemoteId": "f3ef…47f2",
        "fullUrl": "http://…/Awards",
        "link": "http://…/api/ezp/v1/content/node/1257"
    }, { … }
],

Wie man sieht, bekommt man bei den meisten Antworten u.a. auch fertige REST-Links zurück, mit denen man durch den Content-Baum wandern oder – wie hier – Detailinformationen abrufen kann.

Allein mit der Standard-Erweiterung kann man also schon auf den kompletten Inhaltsbaum zugreifen und die Daten – z.B. auf einem mobilen Endgerät – abrufen. Beliebige weitere Funktionen kann man relativ einfach über eine eigene Erweiterung hinzufügen. Die offizielle eZ-Dokumentation der aktuellen REST-Schnittstelle findet sich bei eZ Publish REST API.

Von silver.solutions gibt es je eine App für Android- und iOS-Geräte, die über die REST-Schnittstelle Beiträge in eine eZ-Installation posten kann. Dazu wird eine kleine Erweiterung benötigt, welche die Methode für den REST-POST-Aufruf zur Verfügung stellt. Weitere Informationen finden sich auf der silver.solutions Webseite.

Über den Autor

Markus Birth

Mit 5 Jahren hatte er die erste Berührung mit Computern - einem Schneider CPC464. Lernte später das Programmieren auf einem VC-20 kennen. Über GW-BASIC, Turbo Pascal, Delphi, Java und Perl kam dann irgendwann PHP. War von 2007 bis 2014 als Entwickler und Administrator bei silver.solutions tätig.

Hinterlasse eine Antwort

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

Sie können diese HTML-Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>