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 Setup → oAuth 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 ThemaPOST
oderPUT
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 alsGET
-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.
https://blog.silversolutions.de/2012/04/b2b-technologie/ez-publish-rest-schnittstelle/https://blog.silversolutions.de/wp-content/uploads/2012/04/RESTful.jpghttps://blog.silversolutions.de/wp-content/uploads/2012/04/RESTful-150x150.jpgB2B.technologieCMS,PraxisMit 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...Markus BirthMarkus Birthmab@silversolutions.deEditorMarkus Birth hatte 5 Jahren die erste Berührung mit Computern - einem Schneider CPC464. Später lernte er das Programmieren auf einem VC-20 kennen. Über GW-BASIC, Turbo Pascal, Delphi, Java und Perl kam er dann irgendwann PHP. Markus war von 2007 bis 2014 als Entwickler und Administrator bei silver.solutions tätig.silver.solutions