Einführungen
API-Integration mit Output.Rocks
Einführung in die API-Anbindung Ihrer Systeme
Zielgruppe dieser Einführung: Diese Dokumentation richtet sich an technische Administratoren und Entwickler, die Output.Rocks in bestehende Systeme integrieren möchten. Für die Erstellung von Vorlagen und die Nutzung der Web-UI finden Sie die entsprechende Einführung unter Schnellstart: Templating mit Output.Rocks.
Was ist die Output.Rocks API?
Die Output.Rocks API ermöglicht es technischen Administratoren und Entwicklern, die Dokumentenerstellung und E-Mail-Versendung programmatisch zu steuern. Über einen einzigen POST-Request an api/renderings/ können sowohl Dokument- als auch E-Mail-Vorlagen mit demselben template-Identifier angesprochen werden.
Powercloud-Integration: Diese Einführung zeigt konkrete Beispiele für die Powercloud-Integration. Die Prinzipien gelten jedoch für alle API-Integrationen.
Die ersten Schritte
- Authentifizierung mit API-Token
- Basis-Workflow: POST /api/renderings
- Synchrone Vorschau: POST /api/renderings/preview
- Powercloud-Integration einrichten
- Erweiterte Features nutzen
- User-Interaktion-Feedback
1. Authentifizierung mit API-Token
Bevor Sie die API nutzen können, müssen Sie einen API-Token erstellen. Dieser Token authentifiziert alle API-Requests von Ihrem System.
Die API-Token-Verwaltung finden Sie im Backend unter Integration → API-Token. Eine detaillierte Beschreibung finden Sie unter API-Token.
API-Token erstellen
- Navigieren Sie zu Integration → API-Token → API-Token erstellen
- Geben Sie einen sprechenden Identifier ein (z.B.
powercloud-productionodersap-backend) - Fügen Sie eine Beschreibung hinzu, die den Verwendungszweck erklärt
- Setzen Sie das Aktiv ab-Datum, falls der Token erst später aktiv werden soll
- Speichern Sie den Token
Token-Sicherheit: Der eigentliche Token-Wert wird automatisch beim Speichern generiert und ist nur einmal in der Detailansicht sichtbar. Kopieren Sie den Token sofort und speichern Sie ihn sicher. Der Token kann nicht erneut angezeigt werden.
Token im API-Request verwenden
Der API-Token wird im HTTP-Header X-AUTH-TOKEN übergeben:
curl -X POST https://app.output.rocks/api/renderings \
-H "Content-Type: application/json" \
-H "X-AUTH-TOKEN: Ihr-Token-Hier" \
-H "accept: application/json" \
-d '{
"template": "rechnung_monatsabschluss",
"format": "pdf",
"data": {
"kunde": {
"nummer": "K-12345",
"name": "Max Mustermann"
}
}
}'2. Basis-Workflow: POST /api/renderings
Der zentrale Endpunkt für alle Rendering-Requests ist POST /api/renderings. Ein Request kann sowohl Dokumente als auch E-Mails gleichzeitig auslösen, wenn die entsprechenden Vorlagen denselben Identifier oder Group Identifier verwenden.
Workflow-Diagramm
Request-Struktur
Ein minimaler API-Request sieht folgendermaßen aus:
{
"template": "rechnung_monatsabschluss",
"format": "pdf",
"data": {
"kunde": {
"nummer": "K-12345",
"name": "Max Mustermann",
"email": "max.mustermann@example.com"
},
"vertrag": {
"id": "V-98765",
"datum": "2024-01-15"
}
}
}Request-Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
template | string | Ja | Identifier der Vorlage, die gerendert werden soll |
format | string | Nein | Ausgabeformat: pdf (Standard), doc, odt, rtf, html, txt |
data | object | Nein | JSON-Objekt mit den Daten, die in die Vorlage eingefügt werden |
externalId | string | Nein | Externe ID zur Zuordnung in Fremdsystemen (z.B. Powercloud-Referenz) |
webhook | string | Nein | Identifier oder Group Identifier des Webhooks für Folgeaktionen |
cumulator | string | Nein | Identifier des Cumulators, der nach dem Rendering ausgeführt werden soll |
comment | string | Nein | Kommentar für den Rendering-Prozess |
emailServer | string | Nein | Identifier der E-Mail-Server-Konfiguration in Output.Rocks |
metadata | object | Nein | Zusätzliche Metadaten für den Rendering-Prozess (z.B. für Webhooks) |
staticAttachments | array | Nein | Bis zu 10 benannte Base64-PDFs mit zusammen höchstens 10 MiB dekodierter Größe; nur bei format: "pdf" |
or | object | Nein | Output.Rocks-spezifische Parameter (z.B. pdfUniversalAccessibility: true) |
Format für E-Mails: E-Mail-Vorlagen werden immer als .eml-Dateien gerendert, unabhängig vom angegebenen format-Parameter. Der format-Parameter gilt nur für Dokument-Vorlagen.
Asynchrones Rendering: Das Rendering wird asynchron verarbeitet. Das generierte Dokument kann über die GET-API oder die Admin-UI abgerufen werden. Konfigurierte Webhooks werden nach der Dokumentenerstellung ausgeführt.
Statische PDF-Anhänge im Request
Mit staticAttachments können Sie mehrere bereits fertige PDFs gemeinsam mit dem Rendering übergeben. Jeder Eintrag benötigt einen literalen PDF-Dateinamen und den Base64-kodierten Inhalt:
{
"template": "rechnung_monatsabschluss",
"format": "pdf",
"staticAttachments": [
{
"fileName": "anschreiben-anlage.pdf",
"content": "JVBERi0x..."
},
{
"fileName": "agb.pdf",
"content": "JVBERi0x..."
}
],
"data": {}
}- Bei einem reinen Dokument-Request werden die PDFs in dieser Reihenfolge nach dem Output.Rocks-Dokument und den in der Vorlage konfigurierten statischen Anhängen angefügt.
- Sobald der Request eine E-Mail erzeugt, werden die Dateien stattdessen an jede erzeugte E-Mail angehängt und nicht in Dokument-PDFs zusammengeführt.
- Dateinamen dürfen höchstens 255 Zeichen lang sein, keine Pfad- oder Steuerzeichen enthalten und müssen auf
.pdfenden. Platzhalter im Dateinamen werden nicht ausgewertet; doppelte Namen sind erlaubt. - Ungültiges Base64, Nicht-PDF-Inhalte, strukturell fehlerhafte PDFs sowie überschrittene Anzahl oder Gesamtgröße werden vor Erstellung des Rendering Requests mit HTTP 400 abgelehnt.
Für POST /api/rendering/kvasy stehen dieselben Anhänge als wiederholte Elemente direkt unter <formular> zur Verfügung:
<formular id="21925">
<staticAttachment fileName="anschreiben-anlage.pdf">JVBERi0x...</staticAttachment>
<staticAttachment fileName="agb.pdf">JVBERi0x...</staticAttachment>
<abschlagsformular>
<!-- Template-Daten -->
</abschlagsformular>
</formular>Die JSON-Singularform staticAttachment wird nicht unterstützt. Verwenden Sie auch für eine einzelne Datei immer die Liste staticAttachments.
XML-Requests statt JSON
Sendet Ihr System XML statt JSON, stehen zwei Endpunkte zur Verfügung. Beide erwarten den Content-Type application/xml oder text/xml, verwenden dieselbe Authentifizierung und liefern dieselbe Response-Struktur wie POST /api/renderings.
| Endpunkt | Vorlagenauswahl | Wofür |
|---|---|---|
POST /api/rendering/kvasy | aus dem XML abgeleitet (Element unterhalb von <formular>) | kVASy-Ströme. |
POST /api/rendering/xml | Pflicht-Query-Parameter template | Beliebiges wohlgeformtes XML, zum Beispiel SAP-Formsoutput. |
curl -X POST "https://app.output.rocks/api/rendering/xml?template=Z_V_RECHNUNG&externalId=VR-1000349266" \
-H "X-AUTH-TOKEN: IHR_API_TOKEN" \
-H "Content-Type: application/xml" \
--data-binary @rechnung.xmlBeim generischen Endpunkt wird das Wurzelelement in den Renderdaten beibehalten. Für die Vorlagenentwicklung gelten diese Umwandlungsregeln:
- Element- und Attributnamen werden kleingeschrieben, jedes Zeichen außerhalb von
[a-zA-Z0-9_]wird zu_. Zwei Geschwisterelemente oder zwei Attribute desselben Elements, deren Namen auf denselben Schlüssel fallen (etwa<b-c>und<b_c>), werden mit HTTP 400 abgelehnt statt still zusammengeführt. Elemente werden dabei über Namespace und lokalen Namen verglichen: dasselbe Element mit zwei Präfixen desselben Namespace bleibt ein wiederholtes Element. - Ein Element, das einmal vorkommt, wird zum Objekt beziehungsweise zur Zeichenkette; ein Element, das mehrfach vorkommt, wird zur Liste. Vorlagen mit Wiederholungsbereichen (
rr_) müssen deshalb gegen ein Testdatenpaket entwickelt werden, das tatsächlich mehrere Einträge enthält. - Attribute landen unter
_attributes, gemischter Text neben Kindelementen unter_text. - In der DTD deklarierte interne Entities werden aufgelöst; externe Entities werden nie geladen.
- Der Schlüssel
orauf oberster Ebene ist für Output.Rocks-Steuerdaten reserviert. Ein Wurzelelement, das auforabgebildet wird, wird mit HTTP 400 abgelehnt.
template, externalId, webhook und emailServer dürfen höchstens 255 Zeichen lang sein; längere Werte werden mit HTTP 400 abgelehnt.
Response-Struktur
Bei erfolgreichem Request erhalten Sie einen HTTP-Status-Code 201 und eine Response mit Informationen zum erstellten Request:
{
"id": 12345,
"externalId": "external-id",
"template": "rechnung_monatsabschluss",
"format": "pdf",
"webhook": "my-webhook",
"comment": "My Comment",
"emailServer": "my-smtp"
}3. Synchrone Vorschau: POST /api/renderings/preview
Mit POST /api/renderings/preview prüfen Sie eine gespeicherte Dokumentvorlage, ohne einen Rendering-Request anzulegen. Die Antwort ist unmittelbar das fertige PDF - kein Polling, keine gespeicherten Prozesse, kein E-Mail-Versand.
curl -X POST https://app.output.rocks/api/renderings/preview \
-H "Content-Type: application/json" \
-H "X-AUTH-TOKEN: Ihr-Token-Hier" \
-H "accept: application/pdf" \
--output vorschau.pdf \
-d '{
"template": "rechnung_monatsabschluss",
"data": {
"kunde": {
"nummer": "K-12345",
"name": "Max Mustermann"
}
}
}'Die Vorschau verwendet dieselben Mappings, Marken, Standardwerte, Charts, QR-Codes und Prerender-Webhooks wie ein reguläres Rendering. Passen mehrere Dokumentvorlagen zum Identifier, werden sie in ihrer bestehenden Reihenfolge zusammengefügt. Optionale staticAttachments folgen danach in Request-Reihenfolge – allerdings nur, wenn der Request keine E-Mails erzeugt. Passt zum Identifier auch eine E-Mail-Vorlage, gehen die Anhänge produktiv an die E-Mail und nicht an das Dokument; die Vorschau lässt sie dann ebenfalls weg. Das feste Wasserzeichen VORSCHAU wird anschließend auf jede Seite gesetzt.
Die Vorschau ist kein Ersatz für das Produktivdokument. Für das Wasserzeichen wird das PDF neu aufgebaut. Dabei bleibt nur die sichtbare Seitenebene erhalten - eingebettete Dateien (ZUGFeRD-/Factur-X-XML), PDF/A-Konformität, die PDF/UA-Tag-Struktur, XMP-Metadaten, Lesezeichen und Formularfelder gehen verloren. Prüfen Sie E-Rechnungs- und Barrierefreiheits-Anforderungen immer am Ergebnis von POST /api/renderings.
Die Vorschau rendert synchron im Request und führt dabei auch Prerender-Webhooks aus. Sie ist für Tests und Einzelabrufe gedacht, nicht für Massenverarbeitung; ein Aufruf verarbeitet maximal 20 Dokumente. Für den produktiven Versand bleibt POST /api/renderings der richtige Weg.
4. Powercloud-Integration einrichten
Powercloud.retail kann so konfiguriert werden, dass Events automatisch an Output.Rocks gesendet werden. Dies ermöglicht eine vollständig automatisierte Dokumentenerstellung bei Powercloud-Events.
Voraussetzungen:
Bevor Sie die Powercloud-Integration einrichten, benötigen Sie:
- API-Token in Output.Rocks (siehe Authentifizierung)
- Berechtigung in Powercloud für Event Endpoint-Konfiguration
- Vorlagen in Output.Rocks mit entsprechenden Identifiers
Event Endpoint in Powercloud konfigurieren
-
Navigieren Sie in Powercloud zu All Apps → Settings → Events → Event Endpoints → Endpoint erstellen
-
Füllen Sie das Event Endpoint-Formular aus:
| Feld | Wert |
|---|---|
| Name | Output.Rocks (App) (oder ein anderer sprechender Name) |
| Description | Output.Rocks (App) (bei mehreren Endpoints detailliertere Beschreibung) |
| URL | https://app.output.rocks/api/renderingsTest/Staging: https://app.staging.output.rocks/api/renderings |
| Timeout | 10000 |
| Minimum duration per Request | 0 |
| Send Endpoint via Egress Gateway | false |
| Authentication | No authentication |
JSON Event Mapping konfigurieren
Um Events an Output.Rocks zu senden:
- Navigieren Sie zu All Apps → Settings → Events → JSON Event Mapping
- Klicken Sie auf Bearbeiten bei dem Event, das Sie an Output.Rocks senden möchten
- Im Abschnitt Event Endpoints fügen Sie den konfigurierten Output.Rocks Event Endpoint zu Assigned Endpoints hinzu
Mehrere Event Endpoints: Sie können mehrere Event Endpoints für verschiedene Zwecke konfigurieren. Beispielsweise einen für "nur Druck" und einen anderen für E-Mail-Webhooks oder andere Services.
Erweiterte und dynamische Features nutzen
Output.Rocks bietet mehrere erweiterte Möglichkeiten, die über die Basis-API-Nutzung hinausgehen.
Viele Eigenschaften von Dokumenten und E-Mails können dynamisch über die <<>>-Syntax gesetzt werden. Dies ermöglicht es, Werte aus dem Request-Payload, Standardwerten oder Komponenten zu verwenden.
Verfügbare dynamische Eigenschaften:
Dokument-Prozesse:
- Beschreibung
- Dateiname
- Benutzerdefinierte ID
E-Mail-Prozesse:
- Beschreibung
- Dateiname
- Benutzerdefinierte ID
- Empfänger (An)
- CC
- BCC
- Betreff
Beispiel: Dynamische E-Mail-Eigenschaften
Angenommen, Sie senden folgende Daten im Request:
{
"contract": {
"id": 1234,
"firstName": "Max",
"lastName": "Mustermann",
"balance": 199.0,
"email": "max.mustermann@example.com"
}
}E-Mail-Empfänger dynamisch setzen:
In der E-Mail-Vorlage-Konfiguration im Backend:
<<contract.email>>
Dateiname dynamisch setzen:
<<contract.firstName>>_<<contract.lastName>>Contract<<contract.id>>
Max_Mustermann_Contract_1234.pdfCC mit Standardwert:
<<standard.cc_for_emails>>
Einfache Mapping-Logik: Die <<>>-Syntax auf Eigenschaften erlaubt nur einfaches Mapping (keine Bedingungen, Schleifen oder Funktionen). Für komplexe Logik verwenden Sie Vorlagenkomponenten.
Komplexe Logik mit Vorlagenkomponenten
Für komplexere Logik (z.B. bedingte Betreffzeilen) verwenden Sie Vorlagenkomponenten:
Vorlagenkomponente definieren:
- Identifier:
balance_sign - Wert:
<<cs_{contract.balance >= 0}>>positive<<else>>negative<<es_>>
In E-Mail-Betreff verwenden:
Betreff: Sehr geehrte(r) <<contract.firstName>>, Ihr Saldo ist <<component.balance_sign>>Ergebnis: Sehr geehrte(r) Max, Ihr Saldo ist positive (bei positivem Saldo)
Datenvalidierung
Output.Rocks bietet ein flexibles Validierungskonzept, um sicherzustellen, dass E-Mails und Dokumente nur bei gültigen Daten gerendert werden.
Validatoren erstellen
-
Navigieren Sie zu Vorlagen-Management → Validierung → Validator erstellen
-
Details-Tab:
- Identifier: Eindeutiger Identifier für den Validator (wird in Vorlagen verwendet)
- Beschreibung: Beschreibung der Validierungslogik (z.B. "Prüfung auf positives Saldo")
- Fehlermeldung: Nachricht, die bei fehlgeschlagener Validierung angezeigt wird
- Aktiv ab: Optional für zeitgesteuerte Validatoren
- Aktiv: Checkbox zum Aktivieren/Deaktivieren
-
Datenvalidierung-Tab:
- Invalid, if defined condition returns "true": Wenn aktiviert, wird die Bedingung als "true" erwartet, wenn Daten ungültig sind
- Condition: Die zu prüfende Bedingung (Symfony Expression Language)
Validierungs-Beispiel
Angenommen, Sie möchten sicherstellen, dass das Saldo positiv ist, bevor gerendert wird:
Daten im Request:
{
"contract": {
"id": 1234,
"balance": 199.0
}
}Validatoren-Konfiguration:
- Invalid, if defined condition returns "true" ist aktiviert
- Condition:
data['contract']['balance'] < 0
Oder alternativ:
- Invalid, if defined condition returns "true" ist deaktiviert
- Condition:
data['contract']['balance'] >= 0
Validatoren Vorlagen zuweisen
- Bearbeiten Sie eine Dokument- oder E-Mail-Vorlage
- Öffnen Sie den Tab Validierung
- Weisen Sie die Validator-Identifier zu
Validierungsauswahl: Validatoren werden dynamisch anhand ihrer Identifier ausgewählt. Für jeden Identifier wird der neueste aktive Validator verwendet. Dies ermöglicht zeitgesteuerte Validierungsänderungen über das "Aktiv ab"-Feld.
Invalid-Prozesse verwalten: Prozesse mit Status "invalid" können im Backend unter Requests eingesehen, revalidiert, erzwungen oder gelöscht werden. Ein Link zu invalid-Prozessen erscheint auf dem Dashboard, sobald welche vorhanden sind.
User-Interaktion-Feedback
Output.Rocks kann User-Interaktionen in Powercloud-Systemen erzeugen, wenn Validierungen fehlschlagen oder Prozesse blockiert sind. Zusätzlich bietet Output.Rocks eine API, um Feedback zu geschlossenen User-Interaktionen von Powercloud zu empfangen.
Webhook für User-Interaktionen konfigurieren
- Erstellen Sie einen Webhook in Output.Rocks unter Integration → Webhooks
- Wählen Sie den Typ Powercloud User Interaction oder einen Custom-Webhook
- Konfigurieren Sie die Webhook-Parameter entsprechend Ihrer Powercloud-Instanz
Eine detaillierte Anleitung zur Webhook-Konfiguration finden Sie unter Webhooks.
Powercloud für Feedback konfigurieren
Nach der Webhook-Konfiguration in Output.Rocks muss Powercloud so konfiguriert werden, dass geschlossene User-Interaktionen an Output.Rocks zurückgemeldet werden.
Schritt 1: Event Endpoint für Feedback erstellen
-
Navigieren Sie in Powercloud zu All Apps → Settings → Events → Event Endpoints → Endpoint erstellen
-
Füllen Sie das Event Endpoint-Formular aus:
| Feld | Wert |
|---|---|
| Name | output_rocks_user_interactions |
| Description | Output.Rocks (App) endpoint to receive closed user interactions data |
| URL | https://app.output.rocks/api/powercloud/retail/user-interaction-feedbackTest/Staging: https://app.staging.output.rocks/api/powercloud/retail/user-interaction-feedback |
| Timeout | 10000 |
| Minimum duration per Request | 0 |
| Send Endpoint via Egress Gateway | false |
| Authentication | No authentication |
Schritt 2: Expert Settings konfigurieren
- Navigieren Sie zu All Apps → Settings → Expert Settings
- Setzen Sie die folgenden beiden Expert Settings auf den Event Endpoint-Namen
output_rocks_user_interactions:hook.integration_layer.endpoint_namehook.integration_layer.order_endpoint_name
User-Interaktion-Feedback-Loop
Status-Sichtbarkeit: Der Status von User-Interaktionen ist in Output.Rocks im Feld external state der Prozesse sichtbar. Dies ermöglicht es, den Bearbeitungsstatus direkt im Output.Rocks-Backend zu verfolgen.
Fehlerbehandlung und Monitoring
HTTP-Status-Codes
Output.Rocks verwendet standardmäßige HTTP-Status-Codes:
| Status-Code | Bedeutung | Aktion |
|---|---|---|
201 Created | Rendering-Prozess erfolgreich erstellt | - |
400 Bad Request | Ungültige Request-Struktur oder fehlende Parameter | Request-Struktur prüfen |
422 Unprocessable Entity | Validierungsfehler oder unverarbeitbare Daten | Daten-Payload prüfen |
Fehler-Response-Struktur
Bei Fehlern enthält die Response ein error-Objekt:
{
"error": {
"code": 422,
"message": "Validation failed",
"details": [
"Template 'rechnung_monatsabschluss' not found",
"Required field 'data.customer.number' is missing"
]
}
}Monitoring im Backend
Alle API-Requests werden im Backend unter Requests gelistet. Hier können Sie:
- Den Status jedes Requests einsehen
- Fehlerhafte Prozesse identifizieren
- Blockierte Prozesse (invalid) verwalten
- Erstellte Dokumente und E-Mails einsehen
Dashboard-Überwachung: Das Dashboard zeigt wichtige Metriken wie blockierte Requests, blockierte Dokumentenprozesse und nicht bestätigte E-Mails. Nutzen Sie diese Übersicht für ein schnelles Monitoring Ihrer API-Integration.
Fehlerantworten und Fehlercodes
Die öffentliche REST-API ergänzt synchrone JSON-Fehlerantworten mit einem gemeinsamen
Grundformat. Es gilt für Ressourcen-, Rendering- und Archiv-Endpunkte sowie deren
Authentifizierung. Verwaltungs-API (/api/spa), Legacy, Word-Add-in, OAuth/MCP,
Provider-Callbacks und asynchrone Verarbeitungsergebnisse sind nicht Teil dieses Vertrags.
| Feld | Bedeutung |
|---|---|
status | HTTP-Status der Anfrage |
message | Lesbare Meldung; nicht für Vergleiche in der Fehlerbehandlung verwenden |
errorCode | Stabiler, sprechender Fehlercode |
violations | Falls vorhanden: Liste feldbezogener Validierungsfehler |
violations[].propertyPath | Betroffenes Feld, beispielsweise identifier |
violations[].errorCode | Sprechender Code des einzelnen Feldfehlers |
Beispiel: doppelte QR-Code-Anlage
POST /api/qr-codes antwortet bei einer Verletzung der Eindeutigkeitsprüfung mit
HTTP 422. Der neue Code validation.not_unique gilt auch für entsprechende
Eindeutigkeitsfehler anderer Ressourcen. Endpunkt und propertyPath liefern den Kontext.
{
"status": 422,
"message": "identifier: Active QR-Code definition already exists for client at same activation time",
"errorCode": "validation.failed",
"violations": [
{
"propertyPath": "identifier",
"message": "Active QR-Code definition already exists for client at same activation time",
"code": "23bd9dbf-6b9b-41cd-a99e-4844bcf3077f",
"errorCode": "validation.not_unique"
}
]
}Der Ausschnitt zeigt die für die Fehlerbehandlung relevanten Felder. Zusätzliche
Felder wie detail, type, title oder JSON-LD-/Hydra-Metadaten bleiben erhalten.
Codes der gesamten Antwort
| HTTP-Status | errorCode |
|---|---|
| 400 | request.invalid |
| 401 | auth.unauthenticated |
| 403 | auth.forbidden |
| 404 | resource.not_found |
| 405 | request.method_not_allowed |
| 406 | request.not_acceptable |
| 409 | resource.conflict |
| 413 | request.payload_too_large |
| 415 | request.unsupported_media_type |
| 422 | validation.failed |
| 429 | rate_limit.exceeded |
| 503 | service.unavailable |
| Andere 4xx | request.failed |
| Andere 5xx | server.error |
Die bestehenden HTTP-Statuscodes ändern sich nicht. Ein fachlicher Konflikt kann weiterhin HTTP 409 ergeben; die Eindeutigkeitsvalidierung liefert HTTP 422. Bei 5xx wird für das neue Meldungsfeld ein allgemeiner Fehlertext verwendet.
Codes der einzelnen Feldfehler
| Fehler | violations[].errorCode |
|---|---|
| Wert ist nicht eindeutig | validation.not_unique |
| Pflichtwert fehlt | validation.required |
| Falscher Datentyp | validation.invalid_type |
| Ungültige Auswahl | validation.invalid_choice |
| Wert ist zu kurz | validation.too_short |
| Wert ist zu lang | validation.too_long |
| Ungültiges Format, beispielsweise Regex, E-Mail, URL oder JSON | validation.invalid_format |
| Sonstige oder unbekannte Validierungsverletzung | validation.invalid |
Vorhandene fachliche Codes in punktgetrennter Kleinschreibung werden übernommen.
Eigene Validatoren ohne spezifischen Code liefern validation.invalid.
Der Meldungstext wird nicht zur Bestimmung des Codes ausgewertet.
Diese Tabelle ist nicht abschließend. Sie führt die Codes auf, die aus den
Standardvalidierungen entstehen. Fachliche Validatoren geben ihren eigenen
punktgetrennten Code unverändert als violations[].errorCode aus, beispielsweise
brand.layout_not_for_default. Es kommen also Codes vor, die hier nicht gelistet
sind; die Fehlerbehandlung muss unbekannte Werte generisch verarbeiten und darf
nicht voraussetzen, dass nur die obigen Codes auftreten.
Kompatibilität und Auswertung
Die Erweiterung ist additiv: Vorhandene Felder und Werte werden nicht überschrieben,
auch explizite null-Werte bleiben erhalten. Bei 5xx wird nur ein fehlendes message-Feld
mit einem allgemeinen Fehlertext ergänzt; vorhandene Meldungsfelder bleiben unverändert.
Insbesondere bleibt die bisherige UUID
unter violations[].code bestehen. Es gibt dafür kein angekündigtes Abschaltdatum.
Fehlende message-Felder werden bei 4xx aus detail, hydra:description oder title
ergänzt; andernfalls wird ein Standardtext verwendet.
Neue Integrationen sollten den HTTP-Status und errorCode auswerten. Für einzelne
Felder alle Einträge unter violations prüfen. Unbekannte Codes und zusätzliche
Felder müssen generisch behandelt werden können. Ältere Deployments liefern die
neuen Felder möglicherweise noch nicht; in diesem Fall den HTTP-Status als
Rückfall verwenden.
Content-Type und vorhandene Fehlerformate bleiben bestehen, etwa application/json,
application/problem+json und unterstützte JSON-LD-Fehlerantworten. Die Erweiterung
betrifft JSON-Objekte mit HTTP 400–599. Downloads, Streams, HTML, Erfolgsantworten
und Fehler von vorgeschalteten Diensten sind davon ausgenommen. Aus demselben Grund
sind die drei Felder in der OpenAPI-Beschreibung nicht als required markiert:
Sie sind für JSON-Objekt-Fehlerantworten der öffentlichen Endpunkte vorgesehen,
eine Auswertung sollte ihr Fehlen aber verkraften.