REST-API – Authentifizierung, Antwortumschlag und OpenAPI
Gemeinsame Regeln der externen JSON-Endpunkte: Auflösung des API-Schlüssels, Zusammenführung der Eingabe, Fehlerumschlag und HTTP-Status, Protokollierung und das selbstbeschreibende OpenAPI-Dokument.
Überblick
JSON-Endpunkte für externe Systeme (index.php?route=api/gruppe/ressource.methode). Jeder Ressourcen-Controller hat eine Methode openapi(): array; daraus entsteht die zusammengeführte Beschreibung.
Authentifizierung
- Der Schlüssel kommt im Header
X-Oc-Api-Keyoder abwärtskompatibel im POST-Feldapi_key; die Endpunktemasterdataundsubscription/orderakzeptieren ihn nicht als GET-Parameter, der Explorer schon. - Auflösung:
api/auth::getUserByApiKey()→user_api_key(status=1) verknüpft mit dem aktiven Framework-Benutzer → Benutzer, Gruppe, Benutzername. Fehlt die Tabelleuser_api_key, ist jeder Schlüssel ungültig. - Die Endpunkte prüfen das Funktionsrecht des Schlüsselinhabers mit den Schlüsseln der Admin-Routen (
canActionForUser).
Eingabe und Antwort
apiInput(): GET-Parameter, roher Body (JSON, sonst urlencoded) und POST-Felder zusammengeführt; spätere überschreiben frühere.apiOut()→dlbtjson->restEnvelope(). Bei Erfolg das eigene JSON des Endpunkts mit HTTP 200, Struktur unverändert. Bei Fehlersuccess:false,error(eine Meldung),error_code, bei Feldvalidierung zusätzlicherror_fields.- HTTP-Status aus dem Code (
statusFor()):VALIDATION_ERROR422,BAD_REQUEST400,UNAUTHORIZED401,PERMISSION_DENIED403,NOT_FOUND404,CONFLICT409,DB_QUERY_ERROR,UNCAUGHT_EXCEPTION,PHP_FATAL_ERROR500; ohne CodeVALIDATION_ERROR. - Jeder Methodenrumpf steht in
try/catch;debug_messagekäme nur mit dem Rechtdebughinzu, das auf der Catalog-Seite mangels Rechteverwaltung immer falsch ist. - Protokollierung: erfolgreiche und abgewiesene Aufrufe im Systemprotokoll (Kanäle
api/company,api/addressmaster,api/bankaccountmaster).
OpenAPI und Dokumentation
| Endpunkt | Verhalten | Schutz |
|---|---|---|
api/explorer/openapi | ein OpenAPI-3.0-Dokument aus den openapi()-Teilen der Controller catalog/controller/api/*/*.php (Server-URL, Schema ApiKeyAuth); ohne manuelle Liste und ohne Datenbank; geladen von der Swagger UI /api-explorer/ | gültiger API-Schlüssel (Header, GET oder POST api_key), sonst 403 |
api/explorer/openapi.swagger2 | dasselbe im Format Swagger 2.0 (formData, definitions, securityDefinitions) | gleich |
Admin api/swagger | Swagger UI mit lokalen Assets; nicht im Menü | grundlegendes access-Recht, kein Funktionsrecht |
Admin api/swagger.openapi | OpenAPI-3.1.1-JSON | grundlegendes access, sonst 403 |
Bekannte Einschränkungen
- Die Endpunktbeschreibungen des Admin-OpenAPI-Dokuments sind Dokumentationsplatzhalter („Implementation status: Insufficient data to verify“).
- Die Endpunkte von Explorer und Admin-Dokumentation sind in den Seeds des Rechtekatalogs nicht eingeordnet.