Saltearse al contenido

Histrix Api

Histrix posee un API REST que permite interactuar con todas las aplicaciones instaladas.

La API de Histrix intenta ser auto explicativa y puede ser recorrida mediante un navegador apuntando al directorio de instalación /api

Ej: http://localhost/api/

En ese momento obtendremos la respuesta de la API y los recursos disponibles.

/api

Histrix API
Histrix request response:
Array
(
[resources] => Array
(
[info] => get Histrix Info
[help] => Histrix Api Help
[db] => Available databases
)
[welcomeMessage] => Welcome to Histrix Api!
[Api version] => 0.1
)

/info

Brinda información de versión de la API

Histrix API
Histrix request response:
Array
(
[name] => Histrix
[version] => 2.0
[description] => Rapid web application platform
[api_version] => 1.0
)

/help

La ayuda informa los parámetros disponibles

  • El parametro POST requestFormat permite selección en que formato se quiere la respuesta
Histrix API
Histrix request response:
Array
(
[title] => Api reference
[POST parameters] => Array
(
[requestFormat] => Array
(
[application/json] => returns data in JSON format
[application/xml] => returns data in XML format
[application/php] => returns data as a PHP serialized array
)
)
)

/db

Obtiene un listado de bases disponibles

Histrix API
Histrix request response:
Array
(
[genus] => Array
(
[id] => genus
[name] => Estudio Genus
[description] => Base del Estudio
)
[cliente1] => Array
(
[id] => cliente1
[name] => Cliente 1
[description] => Cliente Uno
)
)

/db/id_base

Aquí obtenemos los recursos disponibles para la base seleccionada

Histrix API
Histrix request response:
Array
(
[resources] => Array
(
[token] => get access token
[logout] => revoke token token
[config] => GET config Data
[menu] => user menu
[app] => use application
)
[database] => Array
(
[id] => id_base
[name] => nombre_base
[description] => Base de prueba
)
)

/db/id_base/token

Permite obtener un token de acceso, al ingresar vía navegador podemos ver las opciones disponibles

Histrix API
Histrix request response:
Array
(
[message] => missign name or password, use token/ as route parameters and send username and password POST variables
[help] => Array
(
[method] => POST
[grant_types] => Array
(
[0] => password
[1] => client_credentials
[2] => refresh_token
)
[parameters] => Array
(
[username] => User Name
[password] => User password
)
)
)

Ejemplo de Autentificación

1 -Obtención de un token mediante curl

Ventana de terminal
curl -u TestClient:TestSecret https://localhost/api/db/id_base/token
-d 'grant_type=client_credentials&username=histrix&password=histrix123'

Parametros:

  • TestClient y TestSecret corresponden a las credenciales del Cliente que accede a la Api de Histrix y deben ser obtenidas en forma directa.
  • grant_type=password - Indica el tipo de autentificación que se va a realizar, en este caso enviando las credenciales del Usuario
  • username: Nombre del Usuario
  • password: Contraseña del Usuario Esto no devolverá una respuesta en JSON de este tipo
{
"access_token":"f446bc61ebb06653cd86309f2e3f49b9481cf6a3",
"expires_in":3600,
"token_type":"Bearer",
"scope":null,
"refresh_token":"4e40020c4fd2c6ccd968ed69152b75bbb9460944"
}

2 - Uso del Token

Una vez que obtenemos el token este se debe utilizar para todas las solicitudes a la API de la siguiente forma:

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" http://localhost/api/db/id_base/menu/

/db/id_base/menu Con el comando

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" http://localhost/api/db/id_base/menu/

Solicitamos los items del menú del usuario poseedor del token enviado.

{
"description": "Nested Tree Menu",
"parameters": {
"id": "menu id"
},
"tree": [
{
"id": "274",
"title": "CONTABILIDAD",
"childs": [
{
"id": "1",
"title": "TABLAS",
"childs": [
{
"id": "21",
"title": "PLAN DE CUENTAS",
"uri": "/app/contabilidad/cuentas_tree.xml"
},
{
"id": "3",
"title": "COMPROBANTES CONTABLES",
"uri": "/app/contabilidad/man/ctbconceptos_crud.xml"
},
etc ...

/db/id_base/me Obtenemos los datos del Usuario conectado

/db/id_base/menu/id_menu Obtenemos 1 Item del menu exclusivamente

curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" http://localhost/api/db/id_base/menu/3
{
"description": "Nested Tree Menu",
"parameters": {
"id": "menu id"
},
"tree": [
{
"id": "3",
"title": "COMPROBANTES CONTABLES",
"uri": "localhost/api/db/id_base/app/contabilidad/man/ctbconceptos_crud.xml"
}
]
}

/db/id_base/app/(uri) Podemos acceder a traves del recurso otorgado por el menú mediante diferentes metodos

Método: OPTIONS

Mediante el método OPTIONS obtenemos información de la estructura del contenedor en formato JSON.

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3"
-X OPTIONS http://localhost/api/db/id_base/app/contabilidad/man/ctbconceptos_crud.xml

Y obtenemos:

{
"resources": {
"GET": "Get Data",
"OPTIONS": "App Info",
"EXPORT": "Export Data",
"POST": "insert Data",
"PUT": "Update Data",
"DELETE": "Delete Data"
},
"dataContainer": {
"titulo": "Categorias de IVA",
"tipoAbm": "abm",
"tipo": "abm",
"TablaBase": "GEN_IVA",
"tablas": {
"GEN_IVA": {
"nombreTabla": "GEN_IVA",
"campos": {
"id_iva": {
"NombreCampo": "id_iva",
"Etiqueta": "código ",
"Size": 12,
"TipoDato": "varchar",
"Suma": 0,
"uid": "id_iva1390445306dc69f7daff",
"id": "id_iva",
"Parametro": {
"id": "id_iva",
"autoinc": "true",
"noshow": "true"
},
"autoinc": "true",
"noshow": "true",
"ayuda": "código de iva"
},
"abreviacion_iva": {
"NombreCampo": "abreviacion_iva",
"Etiqueta": "abrev.",
"Size": 12,
"TipoDato": "varchar",
"Suma": 0,
"uid": "abreviacion_iva13904453064912d64369",
"id": "abreviacion_iva",
"Parametro": {
"id": "abreviacion_iva"
},
"ayuda": "nombre abreviado de la categoria de iva"
},
"nombre_iva": {
"NombreCampo": "nombre_iva",
"Etiqueta": "nombre ",
"Size": "15",
"TipoDato": "varchar",
"Suma": 0,
"uid": "nombre_iva13904453064919cc",
"id": "nombre_iva",
"Parametro": {
"id": "nombre_iva"
},
"size": "15",
"ayuda": "nombre de la categoria de iva",
"oplogico": "and"
},
"letra": {
"NombreCampo": "letra",
"Etiqueta": "letra",
"Size": 12,
"TipoDato": "varchar",
"Suma": 0,
"uid": "letra13904453063ba8f",
"id": "letra",
"Parametro": {
"id": "letra"
},
"ayuda": "letra",
"opcion": {
"": null,
"A": "a",
"B": "b",
"C": "c"
}
}
},
...

Método: GET

Este comando efectúa una consulta de los datos en la aplicación especificada:

Ej:

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3"
-X GET http://localhost/api/db/id_base/app/general/iva_crud.xml

Para archivos:

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3"
-X GET http://localhost/api/db/id_base/app/general/dir

Resultado:

{
"data": [
{
"id_iva": "1",
"abreviacion_iva": "R.Insc.",
"nombre_iva": "Responsable Inscripto",
"letra": "A"
},
{
"id_iva": "2",
"abreviacion_iva": "RNI",
"nombre_iva": "Resp. No Inscripto",
"letra": "A"
},
{
"id_iva": "3",
"abreviacion_iva": "Exe",
"nombre_iva": "Exento",
"letra": "B"
},
{
"id_iva": "4",
"abreviacion_iva": "Exento",
"nombre_iva": "Sujeto Exento",
"letra": "B"
},
{
"id_iva": "5",
"abreviacion_iva": "C.Final",
"nombre_iva": "Consumidor Final",
"letra": "B"
},
{
"id_iva": "6",
"abreviacion_iva": "Monotrib",
"nombre_iva": "Monotributista",
"letra": "B"
}
]
}

Filtros Ejemplo de consulta con parámetros

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3"
-X GET http://localhost/api/db/id_base/app/general/iva_crud.xml?id_iva=1

Este comando solamente va retornar el registro especificado por el campo especificado:

{
"data": [
{
"id_iva": "1",
"abreviacion_iva": "R.Insc.",
"nombre_iva": "Responsable Inscripto",
"letra": "A"
}
]
}

Límites Para fijar un límite en los datos a buscar se debe utilizar el parametro: _limit

Ventana de terminal
_limit : Numero de registros a buscar - (0) elimina limites pre-establecidos

Ejemplo:

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3"
-X GET http://localhost/api/db/id_base/app/general/iva_crud.xml?_limit=3

Rangos Para obtener un rango de datos se debe utilizar los parámetros predeterminados:

Ventana de terminal
_f[] - Field : Nombre del campo
_o[] - Operator : Operador a utilizar (=,!=,>=,<=,like)
_v[] - Value : Valor

Ejemplo de uso del filtro con Rangos:

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3"
-X GET http://localhost/api/db/id_base/app/general/iva_crud.xml?_f[]=id_iva&_o[]=>=&_v[]=3&_f[]=id_iva&_o[]=<&_v[]=5
{
"data": [
{
"id_iva": "3",
"abreviacion_iva": "Exe",
"nombre_iva": "Exento",
"letra": "B"
},
{
"id_iva": "4",
"abreviacion_iva": "Exento",
"nombre_iva": "Sujeto Exento",
"letra": "B"
},
{
"id_iva": "5",
"abreviacion_iva": "C.Final",
"nombre_iva": "Consumidor Final",
"letra": "B"
}
]
}

Método: POST

Esta operación va a insertar un registro en la tabla referenciada por la aplicación.

Debe enviarse en la variable ‘data’ un objeto JSON con los nombres de los campos y los valores a asignar.

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" -X POST
-d 'data=[ { "nombre_iva": "TEST 2", "letra" :"X"}]' http://localhost/api/db/id_base/app/general/iva_crud.xml

Para imagenes o archivos:

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" -X POST http://localhost/api/db/id_base/app/general/files/ruta
curl -F "file=@profile.jpg;filename=profile.jpg;type=image/jpeg"

Método: PUT

Esta operación va a Modificar un registro en la tabla referenciada por la aplicación.

Parametros:

Ventana de terminal
'data' = un objeto JSON con los nombres de los campos y los valores a asignar.
'keys' = un objeto JSON con los nombres de los campos claves por los cuales referenciar el registro a modificar.
Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" -X POST
-d 'data=[ { "nombre_iva": "TEST 2", "letra" :"X"}],
keys=[ { "id_iva": 7}]' http://localhost/api/db/id_base/app/general/iva_crud.xml

Método: DELETE

Esta operación borra los registros especificados con el parametro ‘keys’

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" -X POST
-d 'keys=[ { "id_iva": 7}]' http://localhost/api/db/id_base/app/general/iva_crud.xml

Método: PATCH

Esta operación realiza una transacción de un Array de objetos, siguiendo los campos del xml al cual se le envia la petición

Ventana de terminal
curl --header "Authorization: Bearer f446bc61ebb06653cd86309f2e3f49b9481cf6a3" -X PATCH
-d 'jsonData=[{"clave": "valor", "clave2": "valor2"}, {"clave": "valor", "clave2: "valor2"}]' http://localhost/api/db/id_base/app/general/iva_crud.xml