Rest API Definition

Bietet die Möglichkeit öffentliche und nicht öffentliche REST API's zur Verfügung zu stellen.

Die effektive URL wird im Endpunkt anhand der aktuellen zugriffs-URL (hier im Beispiel http://localhost:8080/_pro) visualisiert.

Es kann optional eine Basis-URI für alle Endpunkte definiert werden,

Jedem Endpunkt kann optional eine URI definiert werden.

Es stehen alle REST Methoden (GET, POST, PUT, DELETE, HEAD, OPTIONS) zur Verfügung.

Über Anonymer Zugriff besteht die Möglichkeit den Endpunkt ohne vorigen Login zu erreichen. Es ist zu beachten, dass hierbei keine Rechte für Suchabfragen etc. bestehen und bei fehlerhafter Konfiguration (z.B. eine Suche als Super-User) Sensible Daten ohne Zugriffskontrolle ausgelesen werden können. Für einen autorisierten Zugriff siehe Kapitel Authorisierter Zugriff.

Die Antwort erfolgt über die Variable "response", weiterhin stehen folgenden Variablen zur verfügung:

Name

Typ

Beschreibung

Richtung

requestHeaders

Map<String,String>

Alle Anfrage Header als Map

Eingehend

queryParameters

Map<String,String>

Alle Anfrage Parameter als Map

Eingehend

response

Object

Das Antwort Objekt

Ausgehend

responseCode

int

Der HTTP Code für die Antwort (Standard: 200)

Ausgehend

responseHeaders

Map<String,String>

Benutzerspezifische Antwort Header

Ausgehend

disableContentHandling

boolean

Wenn der Wert "true" ist, wird die Sonderbehandlung des Inhalts-Objektes (zum liefern von z.B. Binärdateien) deaktiviert und das Objekt wird wie jedes andere Objekt serialisiert (z.B. als JSON

Ausgehend

forceDownload

boolean

Gilt nur wenn disableContentHandling auf "false" ist und die Response ein Inhalts-Objekt ist. Ist forceDownload="false", wird der Content-Disposition auf inline gestellt, bei forceDownload="true" wird dieser auf attachment gestellt

Ausgehend


images/download/attachments/164332692/image-2023-3-27_16-27-34-version-1-modificationdate-1704373025218-api-v2.png


Es stehen folgende HTTP Methoden zu Verfügung:

Methode

Request Body?

Übliche REST Aktion

GET

Nein

Lesen

POST

Ja

Erstellen

PUT

Ja

Ändern

PATCH

Ja

Ändern(Partiell)

HEAD

Nein

Prüfe vorhanden

DELETE

Nein

Löschen


URI Parameter

Die URI kann optional variable Anteile haben, z.B. fetch/{id}. Der Wert von "id" kann dann über die Variable "id" ausgelesen werden. Wichtig: Der Wert darf / kann kein unmaskiertes "/" enthalten. Der Wert sollte daher immer Url-Encodet werden.

Es können mehrere solcher URI Parameter definiert werden, jedoch sind diese dann auch Pflicht.

Wenn z.B. ein dynamischer Pfad ausgelesen werden soll, kann dies über folgenden Ausdruck erfolgen: {dynamicPath: .+} Wichtig: dies kann nur am Ende der URI erfolgen


Eingabetypen und Sonderformen

Wird als Eingabetyp "Inhalt (de.lobster.scm.actionevent.actor.content.Content)" gewählt, so wird keine automatische Deserialisierung vorgenommen. Der gesamte Anfrage Payload steht dann über das Inhalts Objekt zur Verfügung. So kann z.B. eine Binäre Datei oder ein Custom XML geparst werden.

Eine Anfrage vom Typ "application/x-www-form-urlencoded" wird als Client-Objekt übergeben.

Form Data

Client-Objekt JSON

fname=John&lname=Doe

{
"fname": "John",
"lname": "Doe"
}

fname=John&lname=Doe&fname=Agent&lname=Smith

{
"fname": ["John", "Agent"],
"lname": ["Doe", "Smith"]
}

fname[]=John&lname[]=Doe

{ 
"fname": ["John"],
"lname": ["Doe"]
}

Antworttypen

Wird als Antworttyp "Inhalt (de.lobster.scm.actionevent.actor.content.Content)" gewählt, so wird keine automatische Serialisierung vorgenommen. Der gesamte Antwort Payload wird über das Inhalts Objekt zur Verfügung gestellt. Hierbei kann z.B. eine Dateireferenz mit beliebig großen Daten zur Verfügung gestellt werden. Der Content-Type wird hierbei aus dem Inhalts Objekt gelesen und automatisch gesetzt.

In jedem anderen Fall, entscheidet der Rest-Client über den "Accept" Header das Format der Serialisierung.


Authorisierter Zugriff

Wenn der Zugriff über den Browser stattfindet, indem ein Benutzer angemeldet ist, greift automatisch das Session Cookie des angemeldeten Benutzers.

Ansonsten sollte die Authentifizierung über OAuth2 erfolgen (möglich ab _data 4.6)