Référence de l'API REST
Chaque widget Xcrud communique avec un unique endpoint, core/ajax_crud.php - voici la forme de ses requêtes/réponses.
Le paramètre route
Chaque requête porte un paramètre de requête route identifiant la configuration de quelle page utiliser - il correspond à la valeur définie par l'appel ->route() propre à cette page. L'API résout à nouveau les hooks, colonnes et règles de validation de la page côté serveur à partir de cette route à chaque requête ; elle ne fait jamais confiance à une copie fournie par le client.
Opérations
| Opération | Méthode HTTP | Remarques |
|---|---|---|
| Liste | GET | Retourne {success, data, meta} - des lignes paginées plus meta.page/meta.limit/meta.total/meta.sums. |
| Création | POST | Corps JSON de valeurs de champs. Exécute before_insert()/validation/insertion/after_insert() dans cet ordre. |
| Mise à jour | PUT | Corps JSON de valeurs de champs, adressé par la clé primaire de la ligne. Exécute before_update()/validation/mise à jour/after_update(). |
| Suppression | DELETE | Accepte un id unique ou une liste ?ids= en masse. |
| Export | GET | ?export=csv, ?export=xlsx, ou ?export=pdf - diffuse le jeu de résultats filtré/trié actuel sous forme de téléchargement de fichier, plafonné à XcrudConfig::$exportRowLimit lignes. |
| Import | POST | ?import=csv avec un envoi de fichier multipart. Chaque ligne passe par le même pipeline before_insert()/validation/insertion/after_insert() qu'une création à une seule ligne, plafonné à XcrudConfig::$importRowLimit lignes. |
Forme de la réponse de liste
{
"success": true,
"data": [
{ "customerNumber": 103, "customerName": "Atelier graphique", "..." : "..." }
],
"meta": {
"page": 1,
"limit": 10,
"total": 122,
"sums": null
}
}
meta.sums est renseigné au lieu de null lorsqu'une page appelle ->sum() ou utilise ->group_sum_columns() - voir Lignes groupées, sommes & rapports.
Chaque écriture est validée côté serveur
Un client appelant ajax_crud.php directement - en contournant entièrement le JS propre au widget - ne peut atteindre rien qu'un chargement de page normal ne pourrait déjà atteindre. Les requêtes de création/mise à jour sont validées selon exactement les mêmes règles que celles déclarées par la configuration PHP pour cette route : XcrudConfig::$blacklistedTables/$blacklistedColumns filtrent quelles tables/colonnes existent tout court, et les propres règles ->validation_required()/->validation_pattern() de chaque champ sont revérifiées sur le serveur, jamais prises telles quelles depuis le navigateur. Une colonne blacklistée n'est jamais acceptée à l'insertion/la mise à jour quel que soit le contenu du corps de la requête, et un nom de colonne non reconnu est silencieusement ignoré plutôt qu'écrit. Voir Sécurité : liste noire de tables & colonnes pour le modèle complet.