Felder

Felder sind Datenattribute, mit denen Sie Ihren Services Eigenschaften zuordnen können. Wenn Sie eine Liste von Produkten persistieren möchten und jedes Produkt hat beispielsweise einen Namen und einen Beschreibungstext, dann legen Sie für diese beiden Datenattribute entsprechende Felder an. Beim Anlegen eines Feldes müssen Sie den entsprechenden Datentyp des Attributes angeben. Bei der Generierung Ihrer Datenbanktabellen wird diese Information weitergereicht, sodass auf Datenbankebene Ihre Tabellenspalten den richtigen Datentypen zugeordnet werden. Wir implementieren derzeit folgende Datentypen:

Datentypen

Datentyp Beschreibung Beispiel
string Variabler Text. Produktname
text Sehr lange Zeichenkette. Produktbeschreibung
integer Ganzzahl. Produktanzahl im Sortiment
decimal Gleitkommazahl. Produktpreis
float Gleitkommazahl für Berechnungen.  
boolean Boolesche Variable mit zwei möglichen Werten. Ist Produkt auf Lager?
date Datum. Produkthaltbarkeit
time Uhrzeit.  
datetime Datum und Uhrzeit.  
relation Beziehungen zu anderen Feldern. Siehe Kapitel Feldrelationen

HTTP-Request-Body

Es reicht aus den Namen und Typ des entsprechenden Datenattributes zu spezifizieren, wenn Sie ein Feld anlegen wollen. Wenn Sie keinen Datentyp spezifizieren, dann wird standardmäßig eine variable Zeichenkette mit einer Länge von 255 Zeichen angelegt. Je nachdem welchen Datentyp Sie benutzen möchten, müssen Sie noch weitere Daten im HTTP-Request-Body mitsenden.

Schlüssel Beschreibung Optional
name Der Name des Datenattributes. Nein
dataType Der Datentyp Ihres Feldes. Ja
description Beschreibungstext. Ja
dataTypePrecision Genauigkeit. Nur für decimal-Typ. Ja
dataTypeScale Anzahl Nachkommastellen. Nur für decimal-Typ. Ja
length Maximale Länge. Nur für string-Typ. Ja
isUnique Wert darf in der Spalte nur einmal vorkommen. Ja
isNullable Wert darf auf null gesetzt werden. Ja

Felder anlegen

Sie schicken valides JSON an den entsprechenden Endpunkt und spezifizieren den dazugehörigen Service:

curl -X POST "https://localhost/aaas/service/fields" ...
{
  "name" : "color",
  "dataType" : "string",
  "length" : 30,
  "service" : "/aaas/repository/services/1"
}

Der Server gibt Ihnen das angelegte Feld zurück:

{
    "id": 1,
    "name": "color",
    "description": null,
    "dataType": "string",
    "dataTypePrecision": null,
    "dataTypeScale": null,
    "length": 30,
    "isUnique": false,
    "isNullable": false,
    "service": "/aaas/repository/services/1",
    "options": [
    ],
    "constraints": [
    ],
    "relation": null
}
curl -X POST "https://localhost/aaas/service/fields" ...
{
  "name" : "price",
  "dataType" : "decimal",
  "dataTypePrecision" : 10,
  "dataTypeScale" : 2,
  "service" : "/aaas/repository/services/1"
}
{
    "id": 2,
    "name": "price",
    "description": null,
    "dataType": "decimal",
    "dataTypePrecision": 10,
    "dataTypeScale": 2,
    "length": null,
    "isUnique": false,
    "isNullable": false,
    "service": "/aaas/repository/services/1",
    "options": [
    ],
    "constraints": [
    ],
    "relation": null
}
curl -X POST "https://localhost/aaas/service/fields" ...
{
  "name" : "email",
  "dataType" : "string",
  "length" : 255,
  "isUnique" : true,
  "service" : "/aaas/repository/services/2"
}
{
    "id": 3,
    "name": "email",
    "description": null,
    "dataType": "string",
    "dataTypePrecision": null,
    "dataTypeScale": null,
    "length": 255,
    "isUnique": true,
    "isNullable": false,
    "service": "/aaas/repository/services/2",
    "options": [
    ],
    "constraints": [
    ],
    "relation": null
}

Felder bearbeiten

Sie senden die Schlüssel, die Sie bearbeiten möchten an den entsprechenden Endpunkt:

curl -X PUT "https://localhost/aaas/service/fields/3" ...
{
  "length" : 100
}
{
    "id": 3,
    "name": "email",
    "description": null,
    "dataType": "string",
    "dataTypePrecision": null,
    "dataTypeScale": null,
    "length": 100,
    "isUnique": true,
    "isNullable": false,
    "service": "/aaas/repository/services/1",
    "options": [
    ],
    "constraints": [
    ],
    "relation": null
}

Felder anzeigen

Sie können sich alle Felder anzeigen lassen, die einem bestimmten Service zugeordnet sind, indem Sie einen entsprechenden HTTP-Query-Parameter verwenden:

curl -X GET "https://localhost/aaas/service/fields?service=1" ...
[
    {
        "id": 1,
        "name": "color",
        "description": null,
        "dataType": "string",
        "length": 30,
        "dataTypePrecision": null,
        "dataTypeScale": null,
        "isUnique": false,
        "isNullable": false,
        "service": "/aaas/repository/services/1",
        "fieldOptions": [
        ],
        "constraints": [
        ],
        "relation": null
    },
    {
        "id": 2,
        "name": "price",
        "description": null,
        "dataType": "decimal",
        "length": null,
        "dataTypePrecision": 10,
        "dataTypeScale": 2,
        "isUnique": false,
        "isNullable": false,
        "service": "/aaas/repository/services/1",
        "fieldOptions": [
        ],
        "constraints": [
        ],
        "relation": null
    }
]

Felder löschen

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

curl -X DELETE "https://localhost/aaas/service/fields/18"

Wenn das Feld gelöscht wurde, antwortet der API-Server mit dem HTTP-Statuscode 204.

Serialisierungsgruppen

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

Gruppe Definition
relation Serialisiert/Deserialisiert relation-Attribute
constraint Serialisiert/Deserialisiert constraint-Attribute
constraintOption Serialisiert/Deserialisiert constraintOption-Attribute
fieldOption Serialisiert/Deserialisiert fieldOption-Attribute

Deserialiserung von Feldoptionen

So können Sie Felder und Feldoptionen in einem Schritt anlegen. Beim Generieren Ihrer Datenbankstruktur, werden Feldoptionen an die sich unter Ihrer Applikation befindliche Datenbank weitergereicht:

curl -X POST "https://localhost/aaas/service/fields?groups[]=fieldOption" ...
{
  "name" : "sku",
  "dataType" : "string",
  "length" : "14"
  "service" : "/aaas/repository/services/1",
  "fieldOptions": [
    {
      "name" : "default",
      "value" : "PRD-123456789"
    }
  ]
}
{
    "id": 7,
    "name": "sku",
    "description": null,
    "dataType": "integer",
    "length": null,
    "dataTypePrecision": null,
    "dataTypeScale": null,
    "isUnique": false,
    "isNullable": false,
    "service": "/aaas/repository/services/1",
    "fieldOptions": [
        {
            "id": 2,
            "name": "default",
            "value": "PRD-123456789",
            "field": "/aaas/service/fields/7"
        }
    ],
    "constraints": [
    ],
    "relation": null
}

Sie erfahren mehr zu Feldoptionen auf den nächsten Seiten.

Deseralisierung von Feldvalidierungen

curl -X POST "https://localhost/aaas/service/fields?groups[]=constraint&groups[]=constraintOption" ...
{
  "name" : "title",
  "dataType" : "string",
  "service" : "/aaas/repository/services/2",
  "constraints" : [
    {
      "name": "NotBlank",
      "constraintOptions": [
        {
          "name": "message",
          "value": "This value should be not blank."
        }
      ]
    }
  ]
}
{
    "id": 4,
    "name": "title",
    "description": null,
    "dataType": "string",
    "length": null,
    "dataTypePrecision": null,
    "dataTypeScale": null,
    "isUnique": false,
    "isNullable": false,
    "service": "/aaas/repository/services/2",
    "fieldOptions": [
    ],
    "constraints": [
        {
            "id": 2,
            "name": "NotBlank",
            "field": "/aaas/service/fields/19",
            "constraintOptions": [
                {
                    "id": 1,
                    "name": "message",
                    "value": "This value should be not blank.",
                    "constraint": "/aaas/field/constraints/2"
                }
            ]
        }
    ],
    "relation": null
}

Sie erfahren mehr zu Validierungsbeschränkungen auf den nächsten Seiten.

Deseralisierung von Feldrelationen

Mithilfe der relation-Serialisierungsgruppe können Sie auch Felder anlegen, die ihrerseits als Relation für andere Felder dienen:

curl -X POST "https://localhost/aaas/service/fields?groups[]=relation" ...
{
  "name": "author",
  "dataType": "relation",
  "service": "/aaas/repository/services/1",
  "relation": {
    "service": "/aaas/repository/services/2",
    "type": "ManyToOne"
  }
}
{
    "id": 4,
    "name": "author",
    "description": null,
    "dataType": "relation",
    "length": null,
    "dataTypePrecision": null,
    "dataTypeScale": null,
    "isUnique": false,
    "isNullable": false,
    "service": "/aaas/repository/services/1",
    "fieldOptions": [
    ],
    "constraints": [
    ],
    "relation": {
        "id": 1,
        "type": "ManyToOne",
        "mappedBy": null,
        "inversedBy": null,
        "orphanRemoval": false,
        "joinColumnName": null,
        "joinColumnReferencedColumnName": "id",
        "joinColumnIsUnique": false,
        "joinColumnIsNullable": true,
        "field": "/aaas/service/fields/4",
        "service": "/aaas/repository/services/2"
    }
}

Sie erfahren mehr zu Relationen auf den nächsten Seiten.