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ámetro | Para qué |
|---|---|
select | Columnas a devolver, separadas por coma. Por defecto *. |
linkTo | Columna sobre la que se filtra o busca. |
equalTo | Valor exacto que debe tener linkTo. |
search | Búsqueda parcial sobre linkTo (requiere linkTo). |
between1 / between2 | Extremos de un rango sobre linkTo (requiere ambos). |
filterTo / inTo | Filtro adicional (columna + lista de valores) aplicable a las consultas por rango. |
orderBy / orderMode | Columna de orden y sentido (ASC / DESC). |
startAt / endAt | Ventana de paginación. Se aplica siempre y se acota a los topes configurados. |
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');