API Web¶
Flexygo API Web es una interfaz de programación de aplicaciones para acceder a objetos y procesos autorizados externamente desde el panel de control ubicado en Área de Trabajo de Administrador > Seguridad > WebAPI o simplemente haz clic aquí.
Esta API sigue la Iniciativa OpenAPI y se pueden generar SDK con Swagger Codegen utilizando su actual Definición de Esquema.
Es altamente recomendado utilizar HTTPS.
Autenticación OAuth¶
Token de acceso¶
El Token de Acceso es una credencial que puede ser utilizada por una aplicación para acceder a una API. Debes ser transmitido en un encabezado de Autorización HTTP a la API para permitir que los usuarios externos llamen a los métodos de la API.
Puedes solicitar un token de acceso utilizando dos formas:
Enviando credenciales implícitas de usuario¶
Solicitud:¶
let username='myuser';
let pass='mypass';
$.ajax({
type: 'POST',
url: './token',
data: {grant_type: 'password', username: username, password: pass},
success: function (response) {alert('Success!')},
error: function (error) { alert('Fail!')}
});
Respuesta¶
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"ALLgqj...rAxRvWAkjsQ",
"token_type":"bearer",
"expires_in":29,
"refresh_token":"68b....fc97a1"
}
Enviando token de credenciales base 64 en el encabezado de autorización¶
Solicitud¶
let username='myuser';
let pass='mypass';
let b64Token = flexygo.history.Base64.encode(username+':'+pass);
$.ajax({
type: 'POST',
url: './token',
data: {grant_type: 'password'},
success: function (response) {alert('Success!')},
error: function (error) { alert('Fail!')},
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Basic '+b64Token); }
);
Respuesta¶
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"ALLgqj...rAxRvWAkjsQ",
"token_type":"bearer",
"expires_in":29,
"refresh_token":"68b....fc97a1"
}
Token de refresco¶
Un Token de Refresco es un tipo especial de token que contiene la información necesaria para obtener un nuevo Token de Acceso. Puede ser usado para obtener un nuevo Token de Acceso para evitar la expiración sin enviar las credenciales del usuario nuevamente.
Solicitud¶
let refreshToken='68b....fcasd7a1'
let accessToken='xxaasddfgqj...rAasadjsQ';
$.ajax({
type: 'POST',
url: './token',
data: {grant_type: 'refresh_token',refresh_token: refreshToken},
success: function (response) {alert('Success!')},
error: function (error) { alert('Fail!')},
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
);
Respuesta¶
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"Aadfasdfgqj...rAasdfjsQ",
"token_type":"bearer",
"expires_in":29,
"refresh_token":"68b....fc97a1"
}
Métodos de la API Web¶
| Descripción | Método | Url | Parámetros de Url | Datos | Código |
|---|---|---|---|---|---|
| Listar colección | GET | webapi/list/{ObjectName} | ?filter={filter?}&page={page?}&pageSize={pageSize?}&orderBy={orderBy?} | ||
| Listar colección utilizando vista | GET | webapi/list/{ObjectName}/{ViewName} | ?filter={filter?}&page={page?}&pageSize={pageSize?}&orderBy={orderBy?} | ||
| Obtener objeto por id | GET | webapi/object/{ObjectName}/{Id} | |||
| Obtener objeto por filtro | GET | webapi/object/{ObjectName} | ?filter={filter} | ||
| Insertar Objeto | POST | webapi/object/{ObjectName} | data:JsonObject | ||
| Actualizar objeto por id | PUT | webapi/object/{ObjectName}/{Id} | data:JsonObject | ||
| Actualizar objeto por filtro | PUT | webapi/object/{ObjectName} | ?filter={filter?} | data:JsonObject | |
| Eliminar objeto por id | DELETE | webapi/object/{ObjectName}/{Id} | |||
| Eliminar objeto por filtro | DELETE | webapi/object/{ObjectName} | ?filter={filter?} | ||
| Ejecutar proceso con objeto por id | PUT | webapi/exec/{ProcessName}/{ObjectName}/{Id} | data:JsonObject | ||
| Ejecutar proceso con objeto por filtro | PUT | webapi/exec/{ProcessName}/{ObjectName} | ?filter={filter?} | data:JsonObject | |
| Ejecutar proceso sin objeto | PUT | webapi/exec/{ProcessName} | data:JsonObject |
Petición:
let objectName='sysObject';
let filter='ObjectName=\'AHORA_Documento\'';
let page=0;
let pageSize=500;
let orderBy='IsCollection';
let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/list/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter);
apiUrl += '&page=' + encodeURIComponent(page);
apiUrl += '&pageSize=' + encodeURIComponent(pageSize);
apiUrl += '&orderBy=' + encodeURIComponent(orderBy);
$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysObject';
let viewName = 'sysCollections'
let filter='ObjectName=\'AHORA_Documento\'';
let page=0;
let pageSize=500;
let orderBy='IsCollection';
let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/list/' + objectName + '/' + viewName;
apiUrl += '?filter=' + encodeURIComponent(filter);
apiUrl += '&page=' + encodeURIComponent(page);
apiUrl += '&pageSize=' + encodeURIComponent(pageSize);
apiUrl += '&orderBy=' + encodeURIComponent(orderBy);
$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let objectId=0
let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName + '/' + objectId;
$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let filter='TestId=0';
let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter);
$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let properties={'TestId': 1,'Descrip': 'Prueba'}
let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName;
$.ajax({
type: 'POST',
url: apiUrl,
data: JSON.stringify(properties),
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let objectId=1
let properties={'Descrip':'Prueba actualizada id'}
let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName + '/' + objectId;
$.ajax({
type: 'PUT',
url: apiUrl,
data: JSON.stringify(properties),
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let filter='TestId=1';
let properties={"Descrip":"Prueba actualizada filtro"}
let apiUrl='./webapi/object/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter);
$.ajax({
type: 'PUT',
url: apiUrl,
data: JSON.stringify(properties),
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let objectId=1
let apiUrl='./webapi/object/' + objectName + '/' + objectId;
$.ajax({
type: 'DELETE',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let objectName='sysTmpTest';
let filter='TestId=1';
let apiUrl='./webapi/object/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter);
$.ajax({
type: 'DELETE',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let processName='MyProcess';
let objectName='sysTmpTest';
let objectId=1
let processParams = {"Param1":"ParamValue"}
let apiUrl='./webapi/exec/' + processName + '/' + objectName + '/' + objectId;
$.ajax({
type: 'POST',
url: apiUrl,
data: JSON.stringify(processParams),
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let processName='MyProcess';
let objectName='sysTmpTest';
let filter='TestId=1';
let processParams = {"Param1":"ParamValue"}
let apiUrl='./webapi/exec/' + processName + '/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter);
$.ajax({
type: 'POST',
url: apiUrl,
data: JSON.stringify(processParams),
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta:
Petición:
let processName='MyProcess';
let processParams = {"Param1":"ParamValue"}
let apiUrl='./webapi/exec/' + processName
$.ajax({
type: 'POST',
url: apiUrl,
data: JSON.stringify(processParams),
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});
Respuesta: