Feldvalidierungen

Wenn Sie Ihre konstruierten Services Ihren API-Konusumenten zur Verfügung stellen und dabei Eingabewerte restriktieren möchten, dann können Sie die von AaaS-API zur Verfügung gestellten Validierungsoptionen benutzen.

Wir bieten Ihnen eine ganze Reihe an möglichen Validierungsbeschränkungen an und benutzen dabei intern Symfony Validation Constraints. Wenn Sie sich für Datenvalidierung und deren Konfiguration interessieren und erfahren möchten, welche Möglichkeiten wir Ihnen zur Verfügung stellen, dann konsultieren Sie bitte die entsprechende Seite in der Symfony-Dokumentation oder schauen Sie sich die VALID_CONSTRAINTS-Konstante in Constraint.php in unserem Github-Repositorium an.

Auf dieser Seite geben wir Ihnen einen Überblick, wie Sie Feldeingaben beschränken können.

Feldvalidierungen anlegen

Eine Feldvalidierung in AaaS-API besteht immer aus dem Namen des Validators und einer Reihe an möglichen Konfigurationsoptionen. Die Optionen unterscheiden sich je nach verwendetem Validator. Im folgenden belegen wir ein String-Feld mit einem NotBlank-Validator, welcher dafür sorgt, dass Ihre API-Konsumenten später einen Wert für das entsprechende Feld mitsenden müssen:

curl -X POST "https://localhost/aaas/field/constraints" ...
{
  "name": "NotBlank",
  "field": "/aaas/service/fields/1"
}

Der Server antwortet mit dem angelegten Validator:

{
    "id": 1,
    "name": "NotBlank",
    "field": "/aaas/service/fields/1",
    "constraintOptions": [
    ]
}

Wenn Sie später Ihre API generieren lassen und Ihre Konsumenten senden für das entsprechende Feld keinen Wert mit, dann antwortet der API-Server mit dem HTTP-Status-Code 400 (Bad Request):

curl -X POST "https://localhost/aaas/api/blog/authors" -H "accept: application/json" -H "Content-Type: application/ld+json" -d "{ \"name\": \"\"}"

Beachten Sie bitte im Curl-Aufruf, dass der Wert für name leer ist. Der API-Server antwortet dann mit einem entsprechenden clientseitige Fehler:

{
  "type": "https://tools.ietf.org/html/rfc2616#section-10",
  "title": "An error occurred",
  "detail": "name: This value should not be blank.",
  "violations": [
    {
      "propertyPath": "name",
      "message": "This value should not be blank."
    }
  ]
}

Validierungsoptionen anlegen

Sie senden einen HTTP-POST-Request an den entsprechenden Endpunkt:

curl -X POST "https://localhost/aaas/field/constraint/options" ...
{
  "name": "message",
  "value": "This value should be not blank.",
  "constraint": "/aaas/field/constraints/1"
}

Der API-Server antwortet mit der angelegten Ressource:

{
    "id": 1,
    "name": "message",
    "value": "This value should be not blank.",
    "constraint": "/aaas/field/constraints/1"
}

Als Alternative dazu können Sie auch Serialisierungsgruppen benutzen, um Feldvalidierungen und deren Konfigurationsoptionen in einem Schritt anzulegen:

curl -X POST "https://localhost/aaas/field/constraints?groups[]=constraintOption" ...
{
  "name": "NotBlank",
  "field": "/aaas/service/fields/1",
  "constraintOptions": [
    {
      "name": "message",
      "value": "This value should be not blank."
    }
  ]
}
{
    "id": 2,
    "name": "NotBlank",
    "field": "/aaas/service/fields/1",
    "constraintOptions": [
        {
            "id": 2,
            "name": "message",
            "value": "This value should be not blank.",
            "constraint": "/aaas/field/constraints/2"
        }
    ]
}

Feldvalidierungen bearbeiten

Sie senden einen HTTP-PUT-Request an den entsprechenden Endpunkt:

curl -X PUT "https://localhost/aaas/field/constraints/1" ...
{
  "name": "Email"
}
{
    "id": 1,
    "name": "Email",
    "field": "/aaas/service/fields/1",
    "constraintOptions": [
        "/aaas/field/constraint/options/1"
    ]
}

Im obigen Beispiel wird der Eingabewert für das entsprechende Feld auf den Email-Validator geändert und damit auf valide E-Mail-Adressen beschränkt.

Feldvalidierungen löschen

Sie senden einen HTTP-DELETE-Request an den entsprechenden Endpunkt:

curl -X DELETE "https://localhost/aaas/field/constraints/1"

Der API-Server antwortet mit dem HTTP-Statuscode 204.

Feldvalidierungen anzeigen

Um sich alle Validatoren anzeigen zu lassen, die einem bestimmten Servicefeld zugeordnet sind, können Sie einen entsprechenden HTTP-Query-Parameter benutzen. Beachten Sie bitte, dass wir die constraintOption-Serialisierungsgruppe benutzen, um zugehörige Konfigurationsoptionen ergänzend serialisieren zu lassen:

curl -X GET "https://localhost/aaas/field/constraints?field=1&groups[]=constraintOption"
[
    {
        "id": 2,
        "name": "NotBlank",
        "field": "/aaas/service/fields/1",
        "constraintOptions": [
            {
                "id": 2,
                "name": "message",
                "value": "This value should be not blank.",
                "constraint": "/aaas/field/constraints/2"
            }
        ]
    },
    {
        "id": 3,
        "name": "GreaterThan",
        "field": "/aaas/service/fields/1",
        "constraintOptions": [
            {
                "id": 3,
                "name": "message",
                "value": "This value must be greater than 10.",
                "constraint": "/aaas/field/constraints/3"
            },
            {
                "id": 4,
                "name": "value",
                "value": "10",
                "constraint": "/aaas/field/constraints/3"
            }
        ]
    }
]

Serialisierungsgruppen

Sie finden im Folgenden eine Übersicht der verwendeten Serialisierungsgruppen von Feldvalidierungen:

Gruppe Definition
field Serialisiert/Deserialisiert field-Attribute
constraintOption Serialisiert/Deserialisiert constraintOption-Attribute

Serialiserung von Feldern

Um zusätzlich zu den Feldvalidierungen die zugehörigen Felder serialisieren zu lassen, senden Sie einen entsprechenden HTTP-Query-Paramater und setzen ihn auf field:

curl -X GET https://localhost/aaas/field/constraints?groups[]=field ...
[
    {
        "id": 1,
        "name": "NotBlank",
        "field": {
            "id": 1,
            "name": "name",
            "description": null,
            "dataType": "string",
            "length": 100,
            "dataTypePrecision": null,
            "dataTypeScale": null,
            "isUnique": false,
            "isNullable": false,
            "service": "/aaas/repository/services/2",
            "fieldOptions": [
            ],
            "constraints": [
                "/aaas/field/constraints/1"
            ],
            "relation": null
        },
        "constraintOptions": [
            "/aaas/field/constraint/options/1"
        ]
    }
]

Serialiserung von Validierungsoptionen

Sie setzen den HTTP-Query-Parameter für Serialisierungsgruppen auf constraintOption:

curl -X GET https://localhost/aaas/field/constraints?groups[]=constraintOption ...
[
    {
        "id": 1,
        "name": "NotBlank",
        "field": "/aaas/service/fields/1",
        "constraintOptions": [
            {
                "id": 1,
                "name": "message",
                "value": "This value should be not blank.",
                "constraint": "/aaas/field/constraints/1"
            }
        ]
    }
]

Deserialiserung von Validierungsoptionen

Sie setzen den HTTP-Query-Parameter für Serialisierungsgruppen auf constraintOption und senden valide Objekattribute:

curl -X POST https://localhost/aaas/field/constraints?groups[]=constraintOption ...
{
  "name": "Isbn",
  "field": "/aaas/service/fields/1",
  "constraintOptions": [
    {
      "name": "type",
      "value": "isbn10"
    },
    {
      "name": "message",
      "value": "This is not a valid isbn10 book number."
    }
  ]
}
{
    "id": 2,
    "name": "Isbn",
    "field": "/aaas/service/fields/1",
    "constraintOptions": [
        {
            "id": 2,
            "name": "type",
            "value": "isbn10",
            "constraint": "/aaas/field/constraints/2"
        },
        {
            "id": 3,
            "name": "message",
            "value": "This is not a valid isbn10 book number.",
            "constraint": "/aaas/field/constraints/2"
        }
    ]
}