Aller au contenu

API REST

ArtisanCMS expose une API REST pour interagir avec le CMS de manière programmatique. Les routes sont définies dans routes/api.php et les contrôleurs se trouvent dans app/Http/Controllers/Api/.

L’API utilise Laravel Sanctum pour l’authentification. Deux méthodes sont supportées :

  • Session : pour les appels depuis l’interface d’administration (cookie CSRF)
  • Token API : pour les intégrations externes
Fenêtre de terminal
# Authentification par token
curl -H "Authorization: Bearer {votre-token}" \
https://example.com/api/search?q=laravel

Les tokens sont créés depuis le profil utilisateur dans l’administration.

Gère les opérations backend du Page Builder.

MéthodeEndpointDescription
GET/api/builder/blocksListe des blocs disponibles
POST/api/builder/page/{id}/saveSauvegarde du contenu d’une page
POST/api/builder/page/{id}/publishPublication d’une page
GET/api/builder/page/{id}/revisionsHistorique des révisions
POST/api/builder/page/{id}/restore/{revisionId}Restauration d’une révision

Gère l’upload et le traitement des médias.

MéthodeEndpointDescription
GET/api/mediaListe des médias (paginée)
POST/api/media/uploadUpload d’un fichier
DELETE/api/media/{id}Suppression d’un média
POST/api/media/{id}/optimizeOptimisation d’une image
GET/api/media/foldersArborescence des dossiers
POST/api/media/foldersCréation d’un dossier

Fournit une recherche full-text sur le contenu public du site.

MéthodeEndpointDescription
GET/api/searchRecherche full-text
ParamètreTypeDescription
qstringTerme de recherche (obligatoire)
typestringFiltrer par type : page, post
limitintNombre de résultats (défaut : 10, max : 50)
pageintPagination
Fenêtre de terminal
curl "https://example.com/api/search?q=laravel&type=post&limit=5"
{
"data": [
{
"id": 42,
"title": "Guide Laravel",
"excerpt": "Introduction à Laravel 13...",
"url": "/blog/guide-laravel",
"type": "post",
"published_at": "2025-03-15T10:30:00Z"
}
],
"meta": {
"total": 12,
"per_page": 5,
"current_page": 1,
"last_page": 3
}
}

Toutes les réponses suivent une structure JSON cohérente.

{
"data": { ... },
"meta": { ... }
}
{
"message": "Description de l'erreur",
"errors": {
"field": ["Détail de la validation"]
}
}
CodeDescription
200Succès
201Ressource créée
204Succès sans contenu
401Non authentifié
403Non autorisé
404Ressource introuvable
422Erreur de validation
429Trop de requêtes

L’API applique des limites de débit pour protéger le serveur.

GroupeLimiteFenêtre
API générale60 requêtespar minute
Upload média20 requêtespar minute
Recherche30 requêtespar minute

En cas de dépassement, l’API retourne un code 429 avec les en-têtes suivants :

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Retry-After: 45

L’upload utilise multipart/form-data.

Fenêtre de terminal
curl -X POST \
-H "Authorization: Bearer {token}" \
-F "file=@image.jpg" \
-F "folder_id=3" \
-F "alt_text=Description de l'image" \
https://example.com/api/media/upload

Les plugins peuvent ajouter leurs propres endpoints dans routes/admin.php ou via un fichier de routes dédié.

// Dans le ServiceProvider du plugin
Route::prefix('api/my-plugin')->middleware(['api', 'auth:sanctum'])->group(function () {
Route::get('/data', [MyPluginApiController::class, 'index']);
Route::post('/data', [MyPluginApiController::class, 'store']);
});