Saltar al contenido principal

Uso de la API

La API funciona de forma dinámica sobre cualquier tabla: no necesitas definir rutas ni modelos.

Autenticación​

Todas las peticiones (salvo tablas de acceso público) requieren el header:

Authorization: tu-api-key-aqui

Endpoints​

GET — obtener datos​

GET /api/{tabla} # todos los registros
GET /api/{tabla}?select=id_x,nombre_x # solo esas columnas
GET /api/{tabla}?linkTo=columna&equalTo=valor # filtrar por columna
GET /api/{tabla}?linkTo=columna&search=texto # buscar (LIKE)
GET /api/{tabla}?linkTo=col&between1=a&between2=b # filtrar por rango
GET /api/{tabla}?orderBy=columna&orderMode=DESC # ordenar
GET /api/{tabla}?startAt=0&endAt=20 # paginar

Parámetros de consulta​

ParámetroPara qué
selectColumnas a devolver, separadas por coma. Por defecto *.
linkToColumna sobre la que se filtra o busca.
equalToValor exacto que debe tener linkTo.
searchBúsqueda parcial sobre linkTo (requiere linkTo).
between1 / between2Extremos de un rango sobre linkTo (requiere ambos).
filterTo / inToFiltro adicional (columna + lista de valores) aplicable a las consultas por rango.
orderBy / orderModeColumna de orden y sentido (ASC / DESC).
startAt / endAtVentana de paginación. Se aplica siempre y se acota a los topes configurados.
La paginación no es opcional

Aunque no envíes startAt / endAt, la API siempre aplica un LIMIT acotado por la configuración. Si esperas miles de filas y recibes menos, no es un error: tienes que paginar.

Relaciones (JOIN)​

Las relaciones no se piden sobre la tabla: se piden sobre el recurso especial relations, y rel y type van siempre juntos. rel son las tablas y type sus sufijos, en el mismo orden:

GET /api/relations?rel=modules,pages&type=module,page
GET /api/relations?rel=modules,pages&type=module,page&linkTo=url_page&equalTo=productos
GET /api/relations?rel=files,folders&type=file,folder&orderBy=id_file&orderMode=DESC&startAt=0&endAt=15

Si envías rel a /api/{tabla} en vez de a /api/relations, o si omites type, la petición no falla: cae en la consulta sin join y devuelve la tabla sola. Es el error más común al usar este endpoint.

POST — crear​

POST /api/{tabla}
Content-Type: application/x-www-form-urlencoded

campo1=valor1&campo2=valor2

PUT — actualizar​

PUT /api/{tabla}?id=123&nameId=id_tabla

campo1=nuevo_valor1

DELETE — eliminar​

DELETE /api/{tabla}?id=123&nameId=id_tabla

Ejemplo (JavaScript)​

// Obtener todos los productos
fetch('http://localhost/tu-proyecto/api/products', {
headers: { 'Authorization': 'tu-api-key' }
})
.then(r => r.json())
.then(data => console.log(data));

// Crear un producto
fetch('http://localhost/tu-proyecto/api/products', {
method: 'POST',
headers: {
'Authorization': 'tu-api-key',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'name_product=Producto 1&price_product=99.99&stock_product=100'
})
.then(r => r.json())
.then(data => console.log(data));

Desde PHP (frontend público)​

El frontend usa web/controllers/api.controller.php, que lee web/config.php (API base_url + key):

ApiController::getAll('products', '*', 'id_product', 'DESC', 0, 10);
ApiController::getById('products', 5, 'id_product');
ApiController::getByFilter('products', 'status_product', 'active');
ApiController::create('products', ['name_product' => 'X']);
ApiController::update('products', 5, ['name_product' => 'Y'], 'id_product');
ApiController::delete('products', 5, 'id_product');