Referencia de la API REST
Todo widget de Xcrud habla con un único endpoint, core/ajax_crud.php - aquí está la forma de sus peticiones y respuestas.
El parámetro route
Cada petición lleva un parámetro de consulta route que identifica la configuración de qué página usar - coincide con el valor que la propia llamada ->route() de esa página estableció. La API vuelve a resolver los hooks, columnas y reglas de validación de la página en el servidor a partir de esa ruta en cada petición; nunca confía en una copia de nada de eso proporcionada por el cliente.
Operaciones
| Operación | Método HTTP | Notas |
|---|---|---|
| Listar | GET | Devuelve {success, data, meta} - filas paginadas más meta.page/meta.limit/meta.total/meta.sums. |
| Crear | POST | Cuerpo JSON con los valores de los campos. Ejecuta before_insert()/validación/inserción/after_insert() en ese orden. |
| Actualizar | PUT | Cuerpo JSON con los valores de los campos, dirigido por la clave primaria de la fila. Ejecuta before_update()/validación/actualización/after_update(). |
| Eliminar | DELETE | Acepta un único id o una lista masiva ?ids=. |
| Exportar | GET | ?export=csv, ?export=xlsx, o ?export=pdf - transmite el conjunto de resultados filtrado/ordenado actual como descarga de archivo, limitado a XcrudConfig::$exportRowLimit filas. |
| Importar | POST | ?import=csv con una subida de archivo multipart. Cada fila pasa por el mismo flujo before_insert()/validación/inserción/after_insert() que una creación de una sola fila, limitado a XcrudConfig::$importRowLimit filas. |
Forma de la respuesta de listado
{
"success": true,
"data": [
{ "customerNumber": 103, "customerName": "Atelier graphique", "..." : "..." }
],
"meta": {
"page": 1,
"limit": 10,
"total": 122,
"sums": null
}
}
meta.sums se rellena en lugar de null cuando una página llama a ->sum() o usa ->group_sum_columns() - consulta Filas agrupadas, sumas e informes.
Toda escritura se valida en el servidor
Un cliente que llame a ajax_crud.php directamente - saltándose por completo el propio JS del widget - no puede alcanzar nada a lo que no pudiera llegar una carga de página normal. Las peticiones de creación/actualización se validan contra exactamente las mismas reglas que declara la configuración PHP para esa ruta: XcrudConfig::$blacklistedTables/$blacklistedColumns controlan qué tablas/columnas existen siquiera, y las reglas propias de cada campo ->validation_required()/->validation_pattern() se vuelven a comprobar en el servidor, nunca se confía en ellas desde el navegador. Una columna en la lista negra nunca se acepta en inserción/actualización sin importar lo que haya en el cuerpo de la petición, y un nombre de columna no reconocido se ignora silenciosamente en lugar de escribirse. Consulta Seguridad: listas negras de tablas y columnas para el modelo completo.