preauth
Para autenticar a un usuario, consulta primero el tipo de acción preauth . Envía el nombre de usuario junto con tu solicitud y recibirás información sobre si el usuario debe iniciar sesión mediante contraseña y/o autenticación de dos factores, o si es necesario redirigirlo a servidores de terceros (SAML/OAuth).
Ejemplo de entrada:
{
"accessType": 0|1|2|...,
"kname": "...", //Username
"api_key": "" //API-Key
}
Ejemplo de resultado:
{
...
"data":
{
"sso_type": 0/1/2/3,
"sso_redirect": "https://...",
"twofactor_type": 0/1/2/3,
"twofactor_required": true|false
}
}
La respuesta contiene la siguiente información:
| Campo | Descripción |
sso_type |
Tipo de inicio de sesión único: 0: Sin 2FA 1: LDAP 2: SAML 3: OAuth |
sso_redirect |
URL a la que redirigir al usuario (utilizada con SAML + OAuth) |
twofactor_type |
Tipo de autenticación de dos factores 0: Sin 2FA 1: OTP 2: Correo electrónico 3: SMS |
twofactor_required |
Si se requiere o no un segundo factor (todos los tipos de dos factores, excepto el 0) |
Nota: Cuando sso_redirect URL, debes redirigir al usuario al punto final de SSO para la autenticación. Una vez que el usuario regrese, puedes continuar con los siguientes pasos de autenticación.
Nota: En los casos en que se utilicen el correo electrónico o los SMS como autenticación de dos factores, el sistema enviará automáticamente el correo electrónico o el SMS con la solicitud de preautenticación.
auth
Para autenticar al usuario, utiliza el tipo de acción auth. Envía con tu solicitud el nombre de usuario y la contraseña (y el código 2FA si es necesario) y recibirás un token de autenticación como respuesta. El token se puede utilizar luego para procesar solicitudes posteriores.
Ejemplo de entrada:
{
"accessType": 0|1|2|...,
"kname": "...", //Username
"kpass": "...", //Password
"2fa": "...", //optional
"longlife": 0|1 , //optional
"api_key": "" //optional
}
Ejemplo de resultado:
{
...
"data":
{
"kmd":"token"
}
}
Guarda el valor que se encuentra en kmd y envíalo en todas las llamadas posteriores a la API como valor de entrada kmd.
Nota: en caso de autenticación de dos factores, la llamada a auth devolverá un código de error dependiendo del método de autenticación si 2fa no se ha enviado. Si ese es el caso, tendrás que mostrar al usuario una página de autenticación de dos factores que coincida con el código de error (por ejemplo, para introducir el código de correo electrónico o la OTP). Utiliza el token (kmd) que ha recibido y utilice la acción verifyauth para (re)enviar el código 2fa.
verifyauth
La acción verifyauth se puede utilizar para verificar si un token (kmd) sigue siendo válido y/o para enviar un código 2FA para la autenticación de dos factores.
Ejemplo de entrada:
{
"accessType": 0|1|2|...,
"token": "...", //Token from auth
"2fa": "...", //2fa code
}
Ejemplo de resultado:
{
...
"data":
{
"kmd":"token"
}
}
Guarda el valor que se encuentra en kmd y envíalo en todas las llamadas posteriores a la API como valor de entrada kmd.
cerrar sesión
La logout acción cierra una sesión existente (cierre de sesión).
Ejemplo de entrada:
{
"accessType": 0|1|2|...,
"token": "...", //Token from auth
}
derechos
Tipo de acción rights se puede utilizar para obtener una visión general de los modelos y acciones a los que el usuario tiene derecho de acceso.
Ejemplo de entrada:
{
"accessType": 0|1|2|...,
"token": "..."
}
Ejemplo de resultado:
{
...
"data":
[
{
"model": "User",
"actions": ["get","list","update"]
},
{
"model": "Subaccount",
"actions": ["get","list","update","create","delete","deleteinfo"]
}
]
}
lista
El tipo de acción list puede utilizarse para solicitar una lista de entradas de un modelo específico de la base de datos. Este tipo de acción está pensado para ofrecer al usuario una visión general de los elementos (en lugar de mostrar detalles específicos).
Ejemplo de entrada esperada:
{
...
"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)
}
Ejemplo de respuesta:
{
"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
}
}
Los datos de salida consisten en una data matriz y una matriz de encabezado correspondiente. La matriz de datos contiene las filas que se mostrarán al usuario. La matriz de encabezado contendrá la información específica del encabezado (p. ej., ordenación, texto del encabezado, etc.) para cada columna de la tabla.
Los datos del ejemplo anterior darían lugar a la siguiente tabla:

Valores convertidos
Para los campos de tipo lista (subtipos de campo 1, 2 y 12) puedes utilizar el sufijo :convert en cols propiedad de la solicitud para obtener el valor legible del contenido en lugar del valor sin procesar (por ejemplo, el nombre de una columna en lugar del ID). Si se encuentra una columna con este sufijo, la salida contendrá la columna dos veces, una como valor sin procesar y otra como valor convertido.
Ejemplo de entrada esperada:
{
...
"model": "Design",
"action": "list",
"cols": ['strName', 'intPosition:convert']
}
Ejemplo de respuesta:
{
...
"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"
}
],
...
}
}
Filtros
El
filters
La propiedad del JSON de la solicitud se puede utilizar para buscar elementos específicos o reducir la lista de resultados. El
filters
La propiedad consiste en una matriz de elementos de filtro. Cada elemento es un objeto con la siguiente estructura:
{
"fieldname": "...", // Field the filter should apply to
"comparison": "...", // (optional) Comparison type, see description
"value" : "..." // Value to compare the field to
}
Para buscar en todos los campos, se puede utilizar el nombre de campo query .
Los posibles comparison son:
| Tipo de comparación | Descripción |
eql |
Igual. Busca filas en las que el contenido de fieldname sea exactamente igual que value. (Este tipo es el predeterminado si comparison no se utiliza en el objeto.) |
lt |
Menor que. Busca filas en las que el contenido de fieldname es menor que value. |
gt |
Mayor que. Busca filas en las que el contenido de fieldname es mayor que value. |
lte |
Menor que/Igual a. Buscar filas en las que el contenido de fieldname es menor que value o igual a value. |
gte |
Mayor que/Igual. Busca filas en las que el contenido de fieldname es mayor que value o igual a value. |
like |
Contiene. Buscar filas en las que value está contenido en el contenido de fieldname (en parte o por completo). |
in |
Está en la lista. Busca filas en las que el contenido de fieldname sea exactamente igual a uno de value. En este caso value debería ser una matriz. |
is |
Es NULL. Busca filas en las que el contenido de fieldname sea NULL. |
isnot |
No es NULL. Busca filas en las que el contenido de fieldname no sea NULL. |
Ejemplo:
{
...
"filters":
[
{
"fieldname": "age",
"comparison": "gte",
"value" : 27
},
{
"fieldname": "lastname",
"comparison": "like",
"value" : "man"
}
]
}
… encontrará filas en las que age sea igual o mayor que 27 y lastname contenga «man» (por ejemplo, Hofmann, Superman o Mandy)
Obtener
El tipo de acción get se puede utilizar para solicitar una o más entradas de un modelo específico de la base de datos cuando ya se conocen los ID de las entradas. El uso previsto de este tipo de acción es mostrar los datos en un formulario para su edición. Por lo tanto, la respuesta también proporcionará información detallada sobre cada campo.
Ejemplo de entrada esperada:
{
...
"ids": [...] // Array of IDs
}
Envía una matriz vacía de ids para obtener únicamente la definición de los campos. Esto puede ayudarte a crear una nueva entrada basada en la definición de los campos.
Ejemplo de respuesta:
{
"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
}
}
El ejemplo anterior podría dar lugar a un formulario con este aspecto:

crear
Para crear nuevas entradas, puedes utilizar el tipo de acción create.
Ejemplo de entrada esperada:
{
"ids": [],
"data": {
"intID": "0",
"strLogin": "new User",
"strPass": "ABCabc123!",
"intStatus": "1"
}
}
El resultado de una actualización correcta se corresponde con el ejemplo dado para el get tipo de acción. Ejemplo de resultado:
{
"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
}
}
Ten en cuenta que create fallará si ya existe un modelo con el mismo ID. Si quieres anular la configuración existente, puedes enviar los dos campos insertIgnore (value=1) y/o onDuplicateUpdate (valor=1). El envío de insertIgnore indicará al sistema que no devuelva un error si falla la inserción. onDuplicateUpdate indica al sistema que actualice todos los valores en caso de que exista un elemento con el mismo ID.
Actualizar
Para modificar una o varias entradas existentes, puedes utilizar el tipo de acción update.
Ejemplo de entrada esperada:
{
"ids": [ 542 ],
"data":
{
"intID": "542",
"strLogin": "aaa",
"strPass": "abcabc",
"intStatus": "1"
}
}
El resultado de una actualización correcta se corresponde con el ejemplo dado para el get tipo de acción. Ejemplo de resultado:
{
"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
}
}
En caso de error de actualización, el sistema responderá con un mensaje de error como este:
{
"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"
}
}
eliminar
El tipo de acción delete se puede utilizar para eliminar una o más entradas de un modelo específico de la base de datos cuando ya se conocen los ID de las entradas.
Ejemplo de entrada esperada:
{
...
"ids": [...] // Array of IDs
}
Ejemplo de respuesta:
{
"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
}
}