🎁 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.
Articles Liés
Et si l'IA rejetait ton code pour de mauvaises raisons ? Les biais cachés des outils de code review automatisés
Et si l'IA rejetait ton code non pas parce qu'il est mauvais, mais parce qu'elle *pense* qu'il l'est ? Cet article ex...
Créer votre Premier Outil MCP : L'Outil readFile Expliqué
Du setup à l'action ! Créez votre premier outil MCP fonctionnel qui permet à une IA de lire des fichiers. Code comple...
Évolution des Compétences des Développeurs : de l'Expertise Technique à l'Hybride Visionnaire
En quelques mois seulement, l'intelligence artificielle a redéfini le métier de développeur : moins de technique répé...
Automatiser vos Publications Facebook et Instagram avec n8n : Le Guide Salvateur
Si vous pensiez que l'intégration Meta serait un jeu d'enfant, ce guide détaillé va vous éviter des heures de frustra...
Vous laisseriez un Dev Junior coder sans supervision ? Alors pourquoi l'IA ?
84% des développeurs utilisent l'IA, mais 45% du code généré contient des vulnérabilités. Découvrez pourquoi l'IA néc...
Préparer votre boutique PrestaShop pour le Black Friday 2025 avec le module Advanced Search Pro
Découvrez comment le module Advanced Search Pro peut transformer votre boutique PrestaShop en machine à ventes pour l...
Découvrez mes autres articles
Guides e-commerce, tutoriels PrestaShop et bonnes pratiques pour développeurs
Voir tous les articles