Zum Hauptinhalt springen

data_validation_error

HTTP 422 · code: "data_validation_error" · type: https://docs.formfeed.dev/errors/data-validation

Das Rendering hat validate_data: true verlangt, und seine data passen nicht zum Datenschema, das mit der Vorlagenversion gespeichert ist. Formfeed prüft die Daten nur, wenn ein Rendering oder Batch-Element das mit validate_data: true verlangt; ohne das werden die Daten gar nicht gegen das Schema geprüft.

Die Prüfung läuft, bevor etwas gerendert, aufgezeichnet oder gezählt wird; die fehlgeschlagene Anfrage kostet also nichts. errors führt jede Stelle auf, an der die Daten nicht passen, jeweils mit path und message; detail wiederholt die erste und sagt, wie viele weitere es gibt. In einem Batch beginnt detail mit dem Element (Item 3: …), index nennt es, failing_items sagt, wie viele Elemente derselben Vorlagenversion fehlschlugen, und es wird nichts eingereiht.

Beispiel​

{
"type": "https://docs.formfeed.dev/errors/data-validation",
"title": "Data validation failed",
"status": 422,
"detail": "data.invoice.number: must be string (and 1 more)",
"code": "data_validation_error",
"errors": [
{
"path": "data.invoice.number",
"message": "data.invoice.number: must be string"
},
{
"path": "data.invoice.lines[0].qty",
"message": "data.invoice.lines[0].qty: is required"
}
],
"request_id": "req_4b7c1e9a2f3d4c5b8a6e7f9012"
}

Häufige Ursachen​

  • Ein Pflichtfeld fehlt, oder ein Feld hat den falschen Typ.
  • Ein Wert gehört nicht zu den Werten, die ein enum erlaubt (must be one of "draft", "sent").
  • Ein Feld, das das Schema nicht erlaubt, wo es additionalProperties: false setzt (is not allowed by the schema).
  • Die Daten wurden für eine ältere Version der Vorlage gebaut, und das Schema der veröffentlichten Version hat sich geändert.

So beheben Sie es​

  • Korrigieren Sie die Felder, die errors nennt. Pfade beginnen bei data, data.invoice.lines[0].qty ist also qty in der ersten Zeile.
  • Vergleichen Sie Ihre Daten mit GET /v1/templates/{id}/schema, oder prüfen Sie sie ohne Rendering mit POST /v1/templates/{id}/validate.
  • Erzeugen Sie mit formfeed types Typen aus dem Schema, damit Ihr Code keine Daten in falscher Form senden kann. Siehe Typisierte Vorlagendaten.

Eine Anfrage mit validate_data: true für eine Vorlagenversion ohne gespeichertes Schema, oder für html oder eine url, wird stattdessen mit invalid_request abgelehnt.

Wiederholen?​

Nein. Dieselbe Anfrage erhält dieselbe Antwort. Korrigieren Sie die Daten, und senden Sie die Anfrage dann mit einem neuen Idempotency-Key oder ohne: Eine 4xx-Antwort wird 24 Stunden unter ihrem Schlüssel gespeichert, der alte Schlüssel liefert also wieder dieses Problem. Siehe Wiederholen.