API REST
La documentación de la API se encuentra en la página Api Docs.
Este artículo define los recursos disponibles en la API de integración de TicTAP. Si necesitas entender el modelo de datos que usa TicTAP, puedes leer el modelo de datos.
Acceso
Inicio de sesión de miembro del equipo
Si necesitas autenticarte como miembro del equipo con nombre de usuario y contraseña, usa el endpoint de autenticación principal:
POST /api/login
Content-Type: application/json
Cuerpo de la petición:
{
"password": "your-password"
}
username debe contener el correo del miembro.
También puedes incluir opcionalmente team_slug cuando el miembro pertenece a más de un equipo y quieres forzar el inicio de sesión contra un equipo concreto:
{
"password": "your-password",
"team_slug": "my-team"
}
Ejemplo de respuesta:
{
"access_token": "<jwt_access_token>",
"refresh_token": "<refresh_token>",
"ttl": 3600,
"team_slug": "my-team"
}
Campos:
access_token: JWT usado en peticiones autenticadasrefresh_token: token usado para solicitar un nuevo JWTttl: tiempo restante de vida del token de acceso, en segundosteam_slug: slug del equipo resuelto para el token emitido
Refrescar JWT
Para obtener un nuevo token de acceso a partir de un refresh token, usa:
POST /api/refresh-token
Content-Type: application/json
Cuerpo de la petición:
{
"token": "<refresh_token>"
}
Ejemplo de respuesta:
{
"access_token": "<new_jwt_access_token>",
"refresh_token": "<refresh_token>",
"ttl": 3600,
"team_slug": "my-team"
}
Uso del token en las peticiones
Una vez tengas un token de acceso, inclúyelo en las peticiones como cabecera:
AccessToken: <jwt_access_token>
El autenticador actual también acepta:
Authorization: <jwt_access_token>
Token de acceso
Para acceder a la API es necesario disponer de un accessToken. Una vez lo tengas, debes incluirlo en cada petición como cabecera HTTP.
AccessToken: "AccessToken"
Si necesitas probar distintas llamadas a la API, puedes hacerlo desde la misma página de Api Docs usando el botón "authorize".
Definiciones
Al usar la API de integración, primero debes entender qué definiciones están disponibles y qué campos tiene cada una. Una vez tengas esa información, puedes usarla para crear o actualizar entidades con esas definiciones.
Listado de definiciones
Puedes obtener la lista de definiciones disponibles llamando al endpoint:
GET /api/integration/definitions
Este endpoint devuelve una lista de definiciones disponibles en tu Enterprise. Cada definición tiene una propiedad name que la identifica, una propiedad slug que es un identificador único y una propiedad fields que es una lista de campos.
Este es un ejemplo de respuesta:
{
"pages": 11,
"total": 51,
"results": [
{
"name": "Fire extinguisher co2 5kg",
"slug": "fire-extinguisher-co-2-5-kg"
},
{
"name": "Ventilació extractors",
"slug": "ventilacio-extractors"
},
{
"name": "Facility",
"slug": "facility"
},
{
"name": "Bie",
"slug": "bie"
},
{
"name": "Pump",
"slug": "pump"
}
]
}
En el ejemplo anterior hay una lista de 51 definiciones, pero solo se devuelven 5. Esto se debe a que el endpoint devuelve las definiciones en páginas de limit elementos. Si quieres obtener la siguiente página puedes usar el parámetro page:
?page=1&limit=5
El número total de páginas siempre se devuelve en el parámetro pages.
Detalle de una definición
Para obtener la lista de campos que tiene una definición concreta, es necesario hacer una petición al detalle de su slug.
GET /api/integration/definitions/{slug}
Este es un ejemplo:
GET /api/integration/definitions/bie
// Response:
{
"name": "Bie",
"slug": "bie"
"fields": [
{
"type": "text",
"name": "Model",
"required": false,
"indexable": true,
"slug": "model",
"localized": false
},
{
"type": "text",
"name": "Product reference",
"required": false,
"indexable": true,
"slug": "product-reference",
"localized": false
},
{
"type": "date",
"name": "Date",
"required": false,
"indexable": false,
"slug": "date",
"localized": false
},
{
"type": "text",
"name": "Location",
"required": false,
"indexable": false,
"slug": "location",
"localized": false
}
]
}
Cada campo tiene un slug, que lo identifica de forma única y se usará al crear o editar entidades de esa definición.
Cada campo también tiene un type que define el tipo de dato que se almacena en ese campo: text, choice, media, media_collection... Puedes encontrar una referencia de todos los tipos de campo en el modelo de datos.
Entidades
Crear una entidad
Una vez conocida la definición, podemos crear una entidad para esa definición:
POST /api/integration/definitions/{slug}/entities
Este es un ejemplo al crear una entidad para la definición bie:
POST /api/integration/definitions/bie/entities
// Request body:
{
"name": "Bie 1",
"values": {
"model": "Model 1",
"product-reference": "Product reference 1",
"date": "2020-01-01",
"location": "Location 1"
}
}
Cuando alguno de los campos es de tipo media o media_collection (por ejemplo documents), la petición debe usar el tipo de contenido multipart/form-data y el valor del campo debe ser un archivo.
En el siguiente ejemplo, el campo documents es de tipo media_collection y contiene una lista de archivos. El campo photo es de tipo media y es un único archivo.
POST /api/integration/definitions/bie/entities
AccessToken: {AccessToken}
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="name"
Bie 1
------WebKitFormBoundary
Content-Disposition: form-data; name="values[model]"
Model 1
------WebKitFormBoundary
Content-Disposition: form-data; name="values[photo]"
Content-Type: image/png
< /home/debian/pictures/photo.jpeg
------WebKitFormBoundary
Content-Disposition: form-data; name="values[documents][]"; filename="document1.png"
Content-Type: image/png
< /home/debian/documents/document1.pdf
------WebKitFormBoundary
Content-Disposition: form-data; name="values[documents][]"; filename="document2.pdf"
Content-Type: image/jpg
< /home/debian/documents/document2.pdf
------WebKitFormBoundary--
Actualizar una entidad
Al actualizar una entidad, la petición es la misma que al crearla, pero el método es PUT y el endpoint es:
PUT /api/integration/definitions/{slug}/entities/{id}
Los identificadores de las entidades son UUID. Este es un ejemplo al actualizar una entidad para la definición bie:
PUT /api/integration/definitions/bie/entities/a3f4509a-6060-4526-9bae-4a2cbd8f52b5
// Request body:
{
"name": "Bie 1 updated",
"values": {
"model": "Model 1 updated",
"product-reference": "Product reference 1",
"date": "2023-01-02",
"location": "Location 1"
}
}
Eliminar una entidad
Al eliminar una entidad, la petición es una petición DELETE al endpoint:
DELETE /api/integration/definitions/{slug}/entities/{id}
Referencia externa
Al crear o actualizar una entidad, es posible añadir una referencia externa a la entidad. Esto resulta útil cuando quieres vincular la entidad con un sistema externo. Por ejemplo, si tienes SAP y quieres vincular la entidad con un objeto concreto de SAP, puedes añadir el identificador de ese objeto como referencia externa.
La referencia externa es un string que debe ser único para la definición dada. Esto significa que si creas una entidad con una referencia externa, no puedes crear otra con la misma referencia externa.
La referencia externa se añade a la entidad en el campo external_reference. Por ejemplo:
POST /api/integration/definitions/bie/entities
// Request body:
{
"name": "Bie 1",
"external_reference": "SAP-1234",
"values": {
"model": "Model 1",
"product-reference": "Product reference 1",
"date": "2020-01-01",
"location": "Location 1"
}
}
La referencia externa puede actualizarse al actualizar una entidad. Por ejemplo:
PUT /api/integration/definitions/bie/entities/a3f4509a-6060-4526-9bae-4a2cbd8f52b5
// Request body:
{
"name": "Bie 1 updated",
"external_reference": "SAP-UPDATED-1234",
...
}
IMPORTANTE: al actualizar una entidad y no informar external_reference, o si está vacío, la referencia externa actual se elimina de la entidad.
"Padre" de la entidad
Al crear o actualizar una entidad, es posible añadir un "parent" a la entidad. El padre se refiere a la entidad de nivel superior que contiene a la entidad. Por ejemplo, si tienes una definición facility y una definición room, la entidad room puede tener como padre una entidad facility.
Para expresarlo a través de la API puedes añadir el campo parent_id a la entidad.
For example:
POST /api/integration/definitions/room/entities
// Request body:
{
"name": "Room 1",
"parent_id": "a3f4509a-6060-4526-9bae-4a2cbd8f52b5"
...
}
y también es posible usar la "external reference" de la entidad padre:
POST /api/integration/definitions/room/entities
// Request body:
{
"name": "Room 1",
"parent_id": "SAP-FACILITY-1234"
...
}
Esto también puede hacerse al actualizar una entidad, lo que provoca un "move" de la entidad a otro padre. Por ejemplo:
PUT /api/integration/definitions/room/entities/room-uuid
// Request body:
{
"name": "Room 1",
"parent_id": "SAP-ANOTHER-FACILITY"
...
}
IMPORTANTE: NO es posible dejar una entidad "orphan". Al actualizar una entidad y no informar parent_id, o si está vacío, el padre actual permanecerá sin cambios.
