Welche API für Ihre App
Diese Seite richtet sich an App-Entwickler und technische Leitungen, die Bildschirm für Bildschirm entscheiden müssen, welche der drei HTTP-Schnittstellen von Exponential sie aufrufen. Sie vergleicht sie in den Punkten, die für eine App zählen: was jede kann, wie sie authentifiziert, wie ihre Antworten aussehen und was das Serverteam einrichten muss.
Inhalt
Die kurze Antwort
Lesen Sie Inhalte mit der REST-API (/api/ezp/v1 oder /api/ezp/v2). Nutzen Sie die Remote-Dienste
(expservices) für das, was REST nicht bietet: Suche, Bildalias-URLs, URL-Aliase, Sprachen, das Aktualisieren von
Inhalten. Bitten Sie einen PHP-Entwickler nur dann um eine ezjscore-Serverfunktion, wenn keine der beiden hat, was
ein Bildschirm braucht.
Nach Aufgabe
| Aufgabe | REST-API | expservices | Lesen |
|---|---|---|---|
| Ein Element mit seinen Feldern lesen | GET /content/node/<id>?ResponseGroups=Fields | expnode::get, expnode::dataMap | Einen Knoten lesen |
| Einen Ordner seitenweise auflisten | GET /content/node/<id>/list/offset/<n>/limit/<n> | expnode::children | Unterknoten auflisten und Paginierung |
| Unterknoten zählen | GET /content/node/<id>/childrenCount | expnode::childrenCount | dieselbe Seite |
| Suchen | keine | expsearch::search | Inhalte suchen |
| Bild in einer Bildschirmgröße | keine (nur der Originalpfad) | expimage::url, expimage::urls | Bildaliase für Bildschirmgrößen |
| Element über den URL-Pfad (Deep Link) | keine | expnode::getByPath | Knoten-IDs, Remote-IDs und Deep Links |
| Anlegen und veröffentlichen | POST /api/ezp/v2/content/node/create | expnode::create | Inhalte anlegen und entfernen |
| Aktualisieren | antwortet nach der Berechtigungsprüfung mit 501 | expnode::update | Über expservices schreiben |
| Entfernen | DELETE /api/ezp/v2/content/node/delete/<id> | expnode::remove | Inhalte anlegen und entfernen |
| Sprachen der Website | keine | explanguage::prioritized, explanguage::languages | Mehrsprachige Inhalte |
Die Namen der expservices stammen aus den Dienstdeklarationen in extension/expservices/classes/; der vollständige
Katalog steht in der expservices-Referenz.
Nach Eigenschaft
| REST-API | expservices | Eigene ezjscore-Funktion | |
|---|---|---|---|
| Ausgeliefert mit | ezprestapi (vom Root-composer.json von 6.0.15 verlangt) | expservices, Teil der Standarddistribution | Ihrer Erweiterung |
| URL | /api/ezp/<version>/... | /ezjscore/call/exp<domain>::<method>[::arg...] | /ezjscore/call/<name>::<function>[::arg...] |
| Zugangsdaten | OAuth2-Token oder persönlicher API-Schlüssel | expservices-Token oder ein Sitzungscookie | was die Funktion prüft, meist die Sitzung |
| Anonyme Aufrufe | standardmäßig abgelehnt (RequireAuthentication=enabled) | erlaubt für Dienste, die als public markiert sind | Sache der Funktion |
| Form der Antwort | einfache JSON-Objekte; Fehler mit HTTP-Status | {"error_text":"","content":{"ok":...}}, Fehler darin mit HTTP 200 | {"error_text":"","content":<value>} |
| Paginierung | offset, limit im Pfad; childrenCount in den Metadaten | die letzten beiden URL-Argumente; meta.total, meta.has_more | Ihre eigene |
| Versioniert | ja, v1 und v2 | keine Version in der URL | nein |
Der Unterschied in der Fehlerbehandlung ist für Ihre HTTP-Schicht wichtig: REST meldet mit dem Statuscode, was schiefging,
während ein expservices-Aufruf, der den Dienst erreicht, mit HTTP 200 antwortet und den Fehler in content.ok und
content.error.code ablegt (Der Umschlag von expservices).
Schnittstellen kombinieren
Kombinieren ist normal und sicher: Beide laufen als ein Benutzer, und beide prüfen dieselben Rollen und Richtlinien. Halten Sie im Code der App zwei Dinge getrennt:
- Zwei Arten von Zugangsdaten. Ein REST-OAuth-Token oder ein
expk_-Schlüssel ist kein expservices-Token, und einexpt_-Token wird von REST nicht akzeptiert. Speichern und erneuern Sie sie getrennt (Zugangsdaten auswählen). - Zwei Fehlermodelle. Kapseln Sie jede Schnittstelle in einer eigenen Client-Klasse, die deren Antworten in einen einzigen Fehlertyp Ihrer App übersetzt.
Wenn nichts passt
Ein Bildschirm, der Daten braucht, die keine Route und kein Dienst liefert (ein kombiniertes Dashboard, eine eigene Berechnung), bekommt einen eigenen Serverendpunkt, in PHP in einer Erweiterung geschrieben: eine ezjscore-Serverfunktion oder ein eigener REST-Provider. Das ist Arbeit für Anwendungsentwickler: JSON-Endpunkte mit ezjscore, REST-API für Anwendungen. Geben Sie ihnen den Bildschirm, die benötigten Felder und den Benutzer, als der der Aufruf läuft.
Verwandte Seiten
- Was die APIs nicht können
- Headless-Exponential
- JSON-Endpunkte mit ezjscore: ezjscore, expservices oder REST?
- 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.