Allgemeine API: Aktionstypen
vorauthentifizieren
Um einen Benutzer zu authentifizieren, fragen Sie bitte den Aktionstyp ab preauth
erste. Senden Sie mit Ihrer Anfrage den Benutzernamen und Sie erhalten die Information, ob sich der Benutzer per Passwort und/oder 2Factor anmelden muss oder eine Umleitung auf einen Drittanbieter-Server (SAML/OAuth) erforderlich ist.
Eingabebeispiel:
{
"accessType": 0|1|2|...,
"kname": "...", //Username
"api_key": "" //API-Key
}
Ausgabebeispiel:
{
...
"data":
{
"sso_type": 0/1/2/3,
"sso_redirect": "https://...",
"twofactor_type": 0/1/2/3,
"twofactor_required": true|false
}
}
Die Antwort enthält folgende Informationen:
Feld | Beschreibung |
sso_type |
Art des Single-Sign-On: 0: Keine 2FA 1: LDAP 2: SAML 3: OAuth |
sso_redirect |
URL zum Weiterleiten des Benutzers (verwendet mit SAML + OAuth) |
twofactor_type |
Art der Zwei-Faktor-Autorisierung 0: Keine 2FA 1: OTP 2: E-Mail 3: SMS |
twofactor_required |
Ob ein zweiter Faktor erforderlich ist (alle twofactor_types, außer 0) |
Hinweis: Wenn a sso_redirect
URL vorhanden ist, müssen Sie den Benutzer zur Authentifizierung an den SSO-Endpunkt weiterleiten. Sobald der Benutzer zurückkehrt, können Sie mit den nächsten Authentifizierungsschritten fortfahren.
Hinweis: In Fällen, in denen E-Mail oder SMS als Zwei-Faktor-Authentifizierung verwendet werden, sendet das System die E-Mail/SMS automatisch mit der Preauth-Anfrage.
auth
Um den Benutzer zu authentifizieren, verwenden Sie bitte den Aktionstyp auth
. Senden Sie mit Ihrer Anfrage den Benutzernamen und das Passwort (und ggf. 2FA-Code) und Sie erhalten als Antwort ein Authentifizierungstoken. Der Token kann dann verwendet werden, um nachfolgende Anfragen zu bearbeiten.
Eingabebeispiel:
{
"accessType": 0|1|2|...,
"kname": "...", //Username
"kpass": "...", //Password
"2fa": "...", //optional
"longlife": 0|1 , //optional
"api_key": "" //optional
}
Ausgabebeispiel:
{
...
"data":
{
"kmd":"token"
}
}
Speichern Sie den unter gefundenen Wert kmd
und senden Sie es in allen nachfolgenden Aufrufen an die API als Eingabewert kmd
.
Bitte beachten Sie: Im Falle einer Zwei-Faktor-Authentifizierung rufen Sie an auth
wird abhängig von der Authentifizierungsmethode einen Fehlercode zurückgeben, wenn 2fa
wurde nicht gesendet. In diesem Fall müssen Sie dem Benutzer eine Zwei-Faktor-Authentifizierungsseite anzeigen, die dem Fehlercode entspricht (z. B. zur Eingabe des E-Mail-Codes oder des OTP). Bitte benutzen Sie den Token (kmd
), die Sie erhalten haben und Aktion verwenden verifyauth
um den 2fa-Code (erneut) einzureichen.
Verifizierungsauth
Die Aktion verifyauth
kann verwendet werden, um entweder zu überprüfen, ob ein Token (kmd
) noch gültig ist und/oder einen 2fa-Code für die Zwei-Faktor-Authentifizierung vorzulegen.
Eingabebeispiel:
{
"accessType": 0|1|2|...,
"token": "...", //Token from auth
"2fa": "...", //2fa code
}
Ausgabebeispiel:
{
...
"data":
{
"kmd":"token"
}
}
Speichern Sie den unter gefundenen Wert kmd
und senden Sie es in allen nachfolgenden Aufrufen an die API als Eingabewert kmd
.
Abmeldung
Die logout
Aktion beendet eine bestehende Sitzung (Logout).
Eingabebeispiel:
{
"accessType": 0|1|2|...,
"token": "...", //Token from auth
}
Rechte
Aktionstyp rights
kann verwendet werden, um einen Überblick über Modelle und Aktionen zu erhalten, auf die der Benutzer Zugriff hat.
Eingabebeispiel:
{
"accessType": 0|1|2|...,
"token": "..."
}
Ausgabebeispiel:
{
...
"data":
[
{
"model": "User",
"actions": ["get","list","update"]
},
{
"model": "Subaccount",
"actions": ["get","list","update","create","delete","deleteinfo"]
}
]
}
Liste
Der Aktionstyp list
kann verwendet werden, um eine Liste von Einträgen eines bestimmten Modells aus der Datenbank anzufordern. Dieser Aktionstyp soll verwendet werden, um einem Benutzer einen Überblick über Elemente zu bieten (anstatt bestimmte Details anzuzeigen).
Erwartetes Eingabebeispiel:
{
...
"filters": [...], // Filters to apply, see description (optional)
"limit": 100, // Limit of output rows (optional)
"offset": 0, // Start index of first row (optional)
"order": "...", // Column to sort (optional)
"sort": "asc|desc", // Sorting direction of output (optional)
"cols": [...] // If set, will output the named fields, otherwise a default set of fields will be shown
//optional: "assoc": true // If set, returns and associative array instead of a data list
//optional: "dataonly": true // If set, returns the data list only (no header information)
}
Ausgabebeispiel für eine Antwort:
{
"status": "Success",
"statuscode": 0,
"msg": "Erfolgreich",
"model": "Subaccount",
"action": "list",
"data":
{
"data":
[
{
"id": "542",
"row":
[
"542",
"aaa",
"Aktiv"
]
},
{
"id": "543",
"row":
[
"543",
"bbb",
"Aktiv"
]
}
],
"head":
[
{
"headline": "ID",
"colsort": false,
"colorder": "intID",
"colname": "intID"
},
{
"headlineType": "string",
"headline": "Nutzername",
"colsort": false,
"colorder": "strLogin",
"colname": "strLogin"
},
{
"headlineType": "string",
"headline": "Status",
"colsort": false,
"colorder": "intStatus",
"colname": "intStatus"
}
],
"caption": "User",
"count": 2,
"total": 2
}
}
Die Ausgabedaten bestehen aus a data
Array und ein entsprechendes Head-Array. Das Datenarray enthält die Zeilen, die dem Benutzer angezeigt werden sollen. Das Head-Array enthält die spezifischen Überschrifteninformationen (z. B. Sortierung, Überschriftentext usw.) für jede Spalte der Tabelle.
Die obigen Beispieldaten würden dazu führen, dass die folgende Tabelle angezeigt wird:
Umgerechnete Werte
Für Felder vom Typ Liste (Felduntertypen 1, 2 und 12) können Sie das Suffix verwenden :convert
in cols
Eigenschaft der Anfrage, um statt des Rohwertes den lesbaren Wert des Inhalts zu erhalten (zB den Namen einer Spalte statt der ID). Wird eine Spalte mit diesem Suffix gefunden, enthält die Ausgabe die Spalte zweimal, einmal als Rohwert und einmal als konvertierten Wert.
Erwartetes Eingabebeispiel:
{
...
"model": "Design",
"action": "list",
"cols": ['strName', 'intPosition:convert']
}
Ausgabebeispiel für eine Antwort:
{
...
"data":
{
"data":
[
{
"id": "542",
"row":
[
"myDesign",
"3",
"Center middle"
]
},
...
],
"head":
[
{
"headline": "name",
"colsort": false,
"colorder": "strName",
"colname": "strName"
},
{
"headline": "Position",
"colsort": false,
"colorder": "intPosition",
"colname": "intPosition"
},
{
"headline": "Position",
"colsort": false,
"colorder": "intPosition",
"colname": "intPosition:convert"
}
],
...
}
}
Filter
filters
Eigenschaft in der Anforderung JSON kann verwendet werden, um nach bestimmten Elementen zu suchen oder die Ausgabeliste zu reduzieren. Das filters
Die Eigenschaft besteht aus einem Array von Filterelementen. Jeder Gegenstand ist ein Objekt mit folgender Struktur:{
"fieldname": "...", // Field the filter should apply to
"comparison": "...", // (optional) Comparison type, see description
"value" : "..." // Value to compare the field to
}
Um in allen Feldern zu suchen, muss der Feldname query
kann verwendet werden.
Möglich comparison
Werte sind:
Vergleichstyp | Beschreibung |
eql |
Gleich. Finden Sie Zeilen, in denen Inhalt von fieldname ist genau das gleiche wie value . (Dieser Typ ist Standard, wenn comparison wird im Objekt nicht verwendet.) |
lt |
Niedriger als. Finden Sie Zeilen, in denen Inhalt von fieldname ist kleiner als value . |
gt |
Größer als. Finden Sie Zeilen, in denen Inhalt von fieldname größer ist als value . |
lte |
Niedriger als / gleich. Finden Sie Zeilen, in denen Inhalt von fieldname ist kleiner als value oder gleich value . |
gte |
Größer als / gleich. Finden Sie Zeilen, in denen Inhalt von fieldname größer ist als value oder gleich value . |
like |
Enthält. Suchen Sie Zeilen wo value ist im Inhalt von enthalten fieldname (teilweise oder vollständig). |
in |
Ist in der Liste. Finden Sie Zeilen, in denen Inhalt von fieldname ist genau das gleiche wie einer von value . In diesem Fall value sollte ein Array sein. |
is |
Ist Null. Finden Sie Zeilen, in denen Inhalt von fieldname is NULL . |
isnot |
Ist nicht NULL. Finden Sie Zeilen, in denen Inhalt von fieldname ist nicht NULL . |
Beispiel:
{
...
"filters":
[
{
"fieldname": "age",
"comparison": "gte",
"value" : 27
},
{
"fieldname": "lastname",
"comparison": "like",
"value" : "man"
}
]
}
... finden Zeilen wo age
ist gleich oder größer als 27 und lastname
enthält Menschen (zB Hofmann oder Superman oder Mandy)
bekommen
Der Aktionstyp get
kann verwendet werden, um einen oder mehrere Einträge eines bestimmten Modells aus der Datenbank anzufordern, wenn die IDs der Einträge bereits bekannt sind. Mit diesem Aktionstyp sollen die Daten in einem Formular zur Bearbeitung angezeigt werden. Daher liefert die Antwort auch detaillierte Informationen zu jedem Feld.
Erwartetes Eingabebeispiel:
{
...
"ids": [...] // Array of IDs
}
Bitte senden Sie ein leeres Array von ids
um nur die Felddefinition zu erhalten. Dies kann Ihnen helfen, einen neuen Eintrag basierend auf der Felddefinition zu erstellen.
Ausgabebeispiel für eine Antwort:
{
"status": "Success",
"statuscode": 0,
"msg": "Erfolgreich",
"model": "Subaccount",
"action": "get",
"data":
{
"fields":
[
{
"fieldname": "intID",
"displayname": "ID",
"type": 2,
"subtype": 8,
"required": true,
"defaultvalue": null,
"disabled": false,
"infotext": false,
"value": "542",
"displayvalue": "",
"listkeys": [],
"listvalues": []
},
{
"fieldname": "strLogin",
"displayname": "Nutzername",
"type": 1,
"subtype": 0,
"required": true,
"defaultvalue": null,
"disabled": false,
"infotext": false,
"value": "aaa",
"displayvalue": "aaa",
"listkeys": [],
"listvalues": []
},
{
"fieldname": "strPass",
"displayname": "Passwort",
"type": 1,
"subtype": 5,
"required": true,
"defaultvalue": null,
"disabled": false,
"infotext": false,
"value": "%%unchanged%%",
"displayvalue": "********",
"listkeys": [],
"listvalues": []
},
{
"fieldname": "intStatus",
"displayname": "Status",
"type": 2,
"subtype": 1,
"required": false,
"defaultvalue": null,
"disabled": false,
"infotext": false,
"value": "1",
"displayvalue": "Aktiv",
"listkeys": [ 0, 1 ],
"listvalues": [ "Inaktiv", "Aktiv" ]
}
],
"caption": "User: aaa",
"groups": [],
"ids": [ 542 ],
"canDelete": true,
"canSave": true,
"canSaveNew": true
}
}
Das obige Beispiel könnte zu einem Formular führen, das wie folgt aussieht:
erstellen
Um neue Entires zu erstellen, können Sie den Aktionstyp verwenden create
.
Erwartetes Eingabebeispiel:
{
"ids": [],
"data": {
"intID": "0",
"strLogin": "new User",
"strPass": "ABCabc123!",
"intStatus": "1"
}
}
Die Ausgabe eines erfolgreichen Updates entspricht dem Beispiel für das get
Aktionstyp. Ausgabebeispiel:
{
"status": "Success",
"statuscode": 0,
"msg": "Erfolgreich",
"model": "Subaccount",
"action": "get",
"previousAction": "create",
"data":
{
"fields": [...],
"caption": "User: new User",
"groups": [],
"subgroups": [],
"ids": [ 544 ],
"canDelete": true,
"canSave": true,
"canSaveNew": true
}
}
Bitte beachten Sie, dass create
schlägt fehl, wenn das Modell mit derselben ID bereits vorhanden ist. Wenn Sie bestehende Einstellungen überschreiben möchten, können Sie die beiden Felder senden insertIgnore
(Wert=1) und/oder onDuplicateUpdate
(Wert=1). Senden insertIgnore
weist das System an, keinen Fehler zurückzugeben, wenn das Einfügen fehlschlägt. onDuplicateUpdate
weist das System an, alle Werte zu aktualisieren, falls ein Artikel mit derselben ID vorhanden ist.
Aktualisierung
Um ein oder mehrere vorhandene Objekte zu ändern, können Sie den Aktionstyp verwenden update
.
Erwartetes Eingabebeispiel:
{
"ids": [ 542 ],
"data":
{
"intID": "542",
"strLogin": "aaa",
"strPass": "abcabc",
"intStatus": "1"
}
}
Die Ausgabe eines erfolgreichen Updates entspricht dem Beispiel für das get
Aktionstyp. Ausgabebeispiel:
{
"status": "Success",
"statuscode": 0,
"msg": "Erfolgreich",
"model": "Subaccount",
"action": "get",
"previousAction": "update",
"data":
{
"fields": [...],
"caption": "User: aaa",
"groups": [],
"subgroups": [],
"ids": [ 542 ],
"canDelete": true,
"canSave": true,
"canSaveNew": true
}
}
Im Falle eines Aktualisierungsfehlers antwortet das System mit einer Fehlermeldung wie der folgenden:
{
"status": "Error",
"statuscode": 113,
"msg": "Update error, see error message. Field specific messages see response.data",
"model": "Subaccount",
"action": "update",
"data":
{
"strLogin": "Wert muss mindestens 6 Zeichen lang sein",
"strPass": "Wert muss Sonderzeichen beinhalten"
}
}
löschen
Der Aktionstyp delete
kann verwendet werden, um einen oder mehrere Einträge eines bestimmten Modells aus der Datenbank zu löschen, wenn die IDs der Einträge bereits bekannt sind.
Erwartetes Eingabebeispiel:
{
...
"ids": [...] // Array of IDs
}
Ausgabebeispiel für eine Antwort:
{
"status": "Success",
"statuscode": 0,
"msg": "Erfolgreich",
"model": "Subaccount",
"action": "create",
"previousAction": "delete",
"data":
{
"fields": [...],
"caption": "User: new User",
"groups": [],
"subgroups": [],
"ids": [ ],
"canDelete": true,
"canSave": true,
"canSaveNew": true
}
}