🎁 Perplexity PRO offert
Quick Start : Contribuer rapidement à l’Admin API PrestaShop 9

Contribuer au nouvel Admin API de PrestaShop 9 peut sembler intimidant. On lit des mots comme CQRS, API Platform, OAuth2… et beaucoup de développeurs pensent :
“Ouh là, il va falloir suivre des semaines de formation avant de poser ma première pierre.”
En réalité, c’est faux ✅ Avec seulement 8 concepts bien compris, vous pouvez créer un endpoint fonctionnel en moins d’une heure.
Dans ce guide, je vais vous expliquer chaque brique comme si nous étions ensemble en salle de cours : je pose le contexte, j’illustre avec un exemple concret, puis on avance pas à pas.
1. #[ApiResource] : l’étiquette magique
Imaginez une bibliothèque. Tant qu’un livre n’a pas de code-barres, impossible de l’emprunter.
Dans PrestaShop, ce code-barres, c’est #[ApiResource].
Il dit à API Platform : “Cette classe est une ressource exposée par l’API.”
- Sans ça → la classe reste invisible.
- Avec ça → elle devient une porte d’entrée REST.
📚 Lire la doc officielle ApiResource
2. CQRSGet et CQRSCreate : séparer lire et agir
PrestaShop 9 applique une discipline claire :
- Lire des données → c’est le rôle des Queries
- Modifier des données → c’est le rôle des Commands
👉 C’est le pattern CQRS (Command Query Responsibility Segregation).
Concrètement :
CQRSGet→ “Quand on fait un GET, exécute telle Query.”CQRSCreate→ “Quand on fait un POST, exécute telle Command, puis retourne le résultat grâce à telle Query.”
📚 En savoir plus sur CQRS dans PrestaShop
3. Les URI Templates : l’adresse de vos ressources
Chaque ressource a besoin d’une adresse lisible et structurée.
'/products/{productId}'
➡️ Ici, l’API répond à /products/123 avec 123 comme paramètre.
Vous pouvez imbriquer plusieurs niveaux :
/categories/{categoryId}/products/{productId}
👉 Pensez-y comme un plan de ville : vos URI sont les rues où les développeurs vont circuler.
4. Les DTO : des sacs de données
Un DTO (Data Transfer Object) = un sac à dos 🎒 Il ne fait rien par lui-même, il transporte juste des données.
Exemple minimaliste :
class Product {
public int $id;
public string $name;
}
Pas besoin de logique métier ici. 👉 Toute l’intelligence vit déjà dans vos Commands et Queries.
5. Scopes OAuth : les badges d’accès
Une API, c’est une porte ouverte. Mais qui a le droit d’entrer ? La réponse : les scopes OAuth2.
Chaque opération déclare les permissions nécessaires. Exemples :
product_read→ lire des produitsproduct_write→ modifier des produits
Voyez-les comme des badges d’accès en entreprise. Sans le bon badge → pas d’entrée.
6. Requirements : filtrer dès la porte
Un endpoint /products/{productId} doit recevoir un identifiant numérique.
Mais que faire si quelqu’un envoie /products/abc ?
👉 Ajoutez un requirement :
requirements: ['productId' => '\\d+']
Résultat : seules les URLs avec un nombre (/products/123) sont acceptées.
C’est le videur à l’entrée de la boîte de nuit : pas la bonne tenue → pas d’entrée.
7. L’identifier : la carte d’identité de votre ressource
API Platform doit savoir quel champ représente l’identifiant unique. Sinon, impossible de gérer correctement vos ressources.
On ajoute donc :
#[ApiProperty(identifier: true)]
public int $id;
Un seul champ doit jouer ce rôle. 👉 C’est le numéro de sécurité sociale de votre ressource.
8. Organisation : un dossier par entité
Dernier concept : un peu de discipline !
Dans ps_apiresources, chaque ressource vit dans son dossier :
ps_apiresources/src/ApiPlatform/Resources/Product/
👉 Comme un cartable bien rangé : une matière = un cahier, une ressource = un dossier.
📚 Explorer le repo GitHub ps_apiresources
Exemple concret : ressource Product
<?php
namespace PrestaShop\Module\APIResources\ApiPlatform\Resources\Product;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\ApiProperty;
use PrestaShopBundle\ApiPlatform\Metadata\CQRSGet;
use PrestaShopBundle\ApiPlatform\Metadata\CQRSCreate;
#[ApiResource(
operations: [
new CQRSGet(
uriTemplate: '/products/{productId}',
requirements: ['productId' => '\\d+'],
CQRSQuery: GetProductForEditing::class,
scopes: ['product_read']
),
new CQRSCreate(
uriTemplate: '/products',
CQRSCommand: AddProductCommand::class,
CQRSQuery: GetProductForEditing::class,
scopes: ['product_write']
)
]
)]
class Product
{
#[ApiProperty(identifier: true)]
public int $productId;
public string $name;
public float $price;
public bool $active;
}
Astuce : la “triche” avec Commands et Queries existants
Le secret ? Pas besoin de tout réinventer : la majorité des Commands et Queries existent déjà dans le cœur de PrestaShop !
Pour les découvrir :
php bin/console prestashop:list:commands-and-queries
Exemples :
AddProductCommand/GetProductForEditingAddCategoryCommand/GetCategoryForEditingAddCustomerCommand/GetCustomerForEditing
📚 Liste officielle Commands/Queries
Comment démarrer dès aujourd’hui ?
- Rejoignez le Slack
#cfc-adminapipour poser vos questions. - Explorez les ressources existantes dans ps_apiresources.
- Copiez le template ci-dessus, adaptez-le, proposez une Pull Request.
Conclusion : apprendre en marchant
Beaucoup hésitent à contribuer car ils croient devoir tout maîtriser avant de commencer. La vérité : on apprend en contribuant.
Avec ces 8 concepts simples, vous avez déjà les clés pour écrire un endpoint. Les notions avancées (State Providers, Processors, Serialization Groups…) viendront naturellement avec la pratique.
👉 Le meilleur moment pour commencer, c’était hier. Le deuxième meilleur moment, c’est aujourd’hui.
🔗 Ressources utiles
Article publié le 12 septembre 2025 par Nicolas Dabène – Expert PrestaShop & contributeur open source depuis 2010.
Questions Fréquentes
Dois-je créer mes propres Commands et Queries pour l'Admin API ?
Non, dans la majorité des cas, les Commands et Queries existent déjà dans le cœur de PrestaShop. Vous devez simplement les brancher correctement dans votre ressource API.
Quelle est la différence entre l'Admin API et l'ancienne Webservice API ?
L’Admin API repose sur Symfony et API Platform avec support OAuth2 et CQRS, offrant une approche moderne. L’ancienne Webservice API XML est héritée et limitée dans ses fonctionnalités.
Puis-je tester mes endpoints sans interface front ?
Oui, vous pouvez utiliser des clients HTTP comme Postman, Insomnia ou curl pour tester rapidement vos endpoints API et vérifier leur fonctionnement.
Où poser mes questions si je bloque sur l'Admin API ?
Le Slack communautaire PrestaShop, canal #cfc-adminapi, est l’endroit idéal pour échanger avec d’autres contributeurs et obtenir de l’aide.
PrestaShop est-il gratuit?
Oui, PrestaShop est un CMS e-commerce open-source et gratuit. Vous payez uniquement l’hébergement et les modules premium.
PrestaShop convient-il aux débutants?
PrestaShop a une courbe d’apprentissage moyenne. Avec de la documentation, les débutants créent leur boutique en quelques semaines.
Articles Liés
Rigueur du Code vs Chaos de l'IA : Faut-il réinventer nos standards PHP pour les marchands PrestaShop ?
L'arrivée de l'IA dans l'écosystème PrestaShop bouscule nos certitudes de développeurs. Faut-il sacrifier la rigueur ...
Oubliez Python : Pourquoi PHP est le véritable avenir de l'IA pour le Web
Vous pensez que pour faire de l'IA, vous devez apprendre Python et les mathématiques complexes ? Faux. Python est le ...
Comment connecter un serveur MCP à Claude?
Le moment tant attendu : connectons votre serveur MCP sécurisé à Claude Desktop et voyons la magie opérer en conditio...
Arrêtez de réinventer la roue : 5 pépites cachées dans le fichier Tools.php de PrestaShop
Vous pensez que le "Clean Code" est la seule voie ? Détrompez-vous. Parfois, l'efficacité brutale se cache dans les v...
Pourquoi PrestaShop gagne justement parce qu'il n'est PAS un SaaS
Le SaaS est-il un piège doré ? Découvrez pourquoi le modèle "propriétaire" de PrestaShop offre un meilleur ROI à long...
PrestaShop rejoint cyber_Folks & Sylius : Le Big Bang de l'Open Source Européen (et ce que ça change pour vous)
C'est officiel : PrestaShop rejoint l'écosystème cyber_Folks aux côtés de Sylius. Ce n'est pas juste une acquisition,...
Découvrez mes autres articles
Guides e-commerce, tutoriels PrestaShop et bonnes pratiques pour développeurs
Voir tous les articles