Die REST-API
Diese Seite richtet sich an Entwickler, die eine mobile App, ein Frontend einer anderen Technologie oder ein anderes System an eine Exponential-Website anbinden. Exponential 6 liefert eine REST-Schnittstelle zum Lesen von Inhalten und zum Anlegen und Entfernen mit; diese Seite sagt Ihnen, was sie heute abdeckt, wie Sie sich authentifizieren und wo ihre Grenzen liegen.
Inhalt
- Was die API bedient
- Adressen
- Die Routen
- Authentifizierung
- Berechtigungen und Antworten
- Beispiele
- Einstellungen
- Grenzen, die Sie kennen sollten
- Eigene Routen
Was die API bedient
Das REST-Rahmenwerk liegt im Kernel (kernel/private/rest/, settings/rest.ini). Die Inhaltsrouten kommen aus der
Erweiterung ezprestapi (se7enxweb/ezprestapi, von der composer.json im Hauptverzeichnis verlangt), deren Provider
ezp7xRestApiProvider die Präfixe ezp und ezpl bedient. Der Authentifizierungs-Provider des Kernels bedient auth,
den OAuth2-Token-Endpunkt. Der ältere ezprestapiprovider ist veraltet
(REST-API v1 und v2).
Adressen
/api/ezp/v1/content/node/2
| | | |
| | | path
| | version (v1 or v2)
| prefix (provider)
ApiPrefix (rest.ini [System])v1 antwortet wie immer, für vorhandene Clients; Schreibzugriffe gibt es nur in v2.
Die Routen
Relativ zu /api/ezp/<version>:
| Methode | Pfad | v1 | v2 | Was sie tut |
|---|---|---|---|---|
GET | /content/node/<id> | ja | ja | ein Knoten |
GET | /content/node/<id>/list(/offset/<n>)(/limit/<n>)(/sort/<key>(/asc|desc)) | ja | ja | die Unterelemente |
GET | /content/node/<id>/childrenCount | ja | ja | die Zahl der Unterelemente |
GET | /content/node/<id>/fields, /field/<identifier> | ja | ja | alle Felder, ein Feld |
GET | /content/object/<id> und seine fields, field/<identifier> | ja | ja | dasselbe über die Objekt-ID |
POST | /content/node/create | nein | ja | unter parentNodeID anlegen und veröffentlichen |
POST | /content/node/<id> | nein | ja | aktualisieren: antwortet mit 501, noch nicht implementiert |
DELETE | /content/node/delete/<id> | nein | ja | das Objekt des Knotens mit seinen Platzierungen und seinem Teilbaum entfernen |
Abfrageparameter: ResponseGroups=Metadata,Locations,Fields wählt, was eine Antwort enthält; OutputFormat=xhtml
fügt in v2 die gerenderte Ausgabe der Ansicht des Knotens hinzu
(Die Routen).
Authentifizierung
rest.ini [Authentication] RequireAuthentication=enabled ist der Standard: Jede Inhaltsroute braucht einen Benutzer.
| Zugangsdaten | Für | Wie |
|---|---|---|
| Persönlicher API-Schlüssel | ein eigenes Skript des Benutzers | der Benutzer erstellt ihn unter Mein Konto > API-Zugang (braucht die Richtlinie apikey/create); gesendet als Authorization: Bearer expk_... |
| OAuth2-Token | eine Anwendung, die andere Benutzer sich anmelden lässt und für sie handelt | die Anwendung wird unter Setup > oAuth-Verwaltung registriert; Authorization-Code-Flow; Token-Endpunkt POST /api/auth/v1/oauth/token |
Eine Anfrage läuft immer als ein Benutzer und geht nie über dessen Richtlinien hinaus; ein Schlüssel ist zudem auf seine Scopes beschränkt. Schlüssel werden einmal angezeigt, können ablaufen und widerrufen werden (Persönliche API-Schlüssel, OAuth2-Tokens).
Berechtigungen und Antworten
Jeder Aufruf prüft content/read, content/create oder content/remove seines Benutzers, wie es die Website tut.
Antworten: 200, 201 für ein Anlegen, 400 für ein fehlendes oder unbekanntes Feld, 401 ohne gültige
Zugangsdaten, 403 access_denied, wenn der Benutzer es nicht darf, 404 für einen unbekannten Knoten. Richten Sie
API-Zugriff ein, indem Sie einem eigenen Konto eine Rolle mit genau den Rechten geben, die der Client braucht
(Sektionen, Rollen und Richtlinien).
Beispiele
Halten Sie den Schlüssel in einer Umgebungsvariablen, nie in einer Datei, die Sie committen:
read -s EXP_API_KEY && export EXP_API_KEY
curl -s -H "Authorization: Bearer $EXP_API_KEY" https://www.example.com/api/ezp/v1/content/node/2
curl -s -H "Authorization: Bearer $EXP_API_KEY" \
"https://www.example.com/api/ezp/v1/content/node/2/list/offset/0/limit/20?ResponseGroups=Fields"
curl -s -H "Authorization: Bearer $EXP_API_KEY" https://www.example.com/api/ezp/v2/content/node/create \
-d parentNodeID=<node id> -d classIdentifier=folder -d languageLocale=eng-US -d name='From a script'Ein Anlegen antwortet mit {"message":"Created","objectId":...,"nodeId":...}. Mehr unter
Beispiele mit curl und in der Lektion
Die API mit einem persönlichen Schlüssel aufrufen.
Einstellungen
Einstellung (rest.ini) | Bedeutung |
|---|---|
[System] ApiPrefix | der Pfad, unter dem die REST-Schnittstelle antwortet (/api) |
[ApiProvider] ProviderClass[<prefix>] | die Provider-Klasse jedes Präfixes |
[Authentication] RequireAuthentication, AuthenticationStyle, RequireHTTPS | wer aufrufen darf, wie, und nur über HTTPS |
[ApiKeySettings] ApiKeys | persönliche Schlüssel an oder aus (standardmäßig an) |
[OAuthSettings] TokenTTL, RefreshTokenTTL | die Lebensdauer eines OAuth2-Tokens und seines Refresh-Tokens |
[OAuthSettings] AllowTokenInQuery, AllowTokenInBody | wo außer im Header Authorization ein Token gelesen wird |
Lesen Sie sie so, wie die Website sie sieht: ./console exp:ini list rest.ini/Authentication. Schalten Sie
RequireHTTPS für jede Installation ein, die für andere erreichbar ist.
Grenzen, die Sie kennen sollten
- Noch keine Route zum Aktualisieren.
POST /api/ezp/v2/content/node/<id>antwortet mit 501. Ändern Sie über die GraphQL-MutationupdateContent(Die GraphQL-API), suchen Sie im Katalog vonexpservicesnach einem Aktualisierungsdienst, oder führen Sie ein Skript auf dem Server aus (Inhalte aus PHP). listAtomantwortet mit 500 in v1 und v2: Verwenden Sie die Routelistoder den RSS-Export der Website (Bekanntes Problem: listAtom).- Das ist nicht die REST-API der Symfony-Plattformen. Clients, die für
/api/ibexa/v2geschrieben wurden, brauchen Änderungen (Umstieg von eZ Platform oder Ibexa). - GraphQL ist eine eigene API. Exponential 6.0.15 antwortet mit GraphQL unter
/api/graphql, aus, bis es eingeschaltet wird (Die GraphQL-API).
Eigene Routen
Ein REST-Provider in Ihrer Erweiterung fügt Routen unter einem eigenen Präfix hinzu, mit Controllern, die die
Kernel-API verwenden (Ein eigener REST-Provider).
Für Funktionen der Administration und einfache JSON-Aufrufe gibt es außerdem expservices und die Serverfunktionen
von ezjscore (Headless-Auslieferung).
Verwandte Seiten
- Entfernte Dienste und Apps
- Standards für APIs und Protokolle
- Modul 11: Die REST-API
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.