L'essentiel
API Platform est le framework de reference pour construire des API REST et GraphQL avec Symfony. Il genere automatiquement la documentation OpenAPI, gere la pagination, le filtrage, la serialization et le content negotiation a partir de vos entites Doctrine.
En version 4.x, API Platform adopte une architecture basee sur des classes ApiResource PHP 8 attributes, ce qui simplifie la configuration et renforce le typage statique. Une API CRUD complete avec documentation interactive se genere en moins de 30 minutes.
Pour passer en production, il faut ajouter l'authentification JWT (LexikJWTAuthenticationBundle), le rate limiting (Symfony RateLimiter), les serialization groups pour controler les donnees exposees et une suite de tests Behat pour valider les contrats d'API.
API Platform : generer une API REST complete avec Symfony en quelques heures
OpenAPI auto-doc, serialization groups, pagination, filters, GraphQL, JWT auth et tests Behat : tout ce qu'il faut pour livrer une API de production.
Adapté à toute taille de structure
Construire une API REST de A a Z avec Symfony sans API Platform demande des semaines : routing, serialization, validation, pagination, documentation, gestion des erreurs, content negotiation. API Platform compresse tout ce travail en quelques heures. Ce framework open-source, cree par Kevin Dunglas et maintenu par une communaute active, est devenu le standard de facto pour les API PHP en entreprise. Chez Nehos, nous l'utilisons sur la majorite de nos projets B2B depuis 2019, de l'API interne d'un ERP logistique a la plateforme SaaS d'un editeur fintech. Voici un guide technique complet pour construire, securiser et tester une API REST de production avec API Platform 4.x et Symfony 7.
#Pourquoi API Platform plutot qu'une API Symfony maison ?
La question merite d'etre posee. Symfony fournit nativement tous les composants pour construire une API : le composant Serializer pour transformer les objets en JSON, le composant Validator pour valider les donnees entrantes, le composant Routing pour definir les endpoints et le composant Security pour gerer l'authentification. Alors pourquoi ajouter une couche supplementaire ? La reponse tient en trois mots : productivite, standardisation et maintenabilite. API Platform elimine le code boilerplate en generant automatiquement les endpoints CRUD (GET collection, GET item, POST, PUT, PATCH, DELETE) a partir de vos entites Doctrine. Il produit une documentation OpenAPI 3.1 interactive (Swagger UI) sans aucune configuration. Il gere nativement la pagination, le filtrage, le tri et le content negotiation (JSON, JSON-LD, HAL, CSV). Il impose des conventions qui rendent le code previsible pour n'importe quel developpeur qui rejoint le projet. Sur un projet typique avec 15 a 20 entites, API Platform economise 3 a 4 semaines de developpement par rapport a une API Symfony faite a la main. C'est un gain que nos clients ETI mesurent directement sur leurs budgets de developpement.
#Installation et configuration initiale d'API Platform 4.x
L'installation d'API Platform sur un projet Symfony 7 existant se fait via Composer et Symfony Flex. La commande composer require api installe le bundle principal et configure automatiquement les fichiers necessaires grace aux recipes Flex. Apres installation, la configuration de base se trouve dans config/packages/api_platform.yaml ou vous pouvez definir le titre de l'API, la description, la version et les formats de serialization supportes. Le point d'entree par defaut est /api, configurable dans le fichier de routes. Pour exposer une entite comme ressource API, il suffit d'ajouter l'attribut PHP 8 ApiResource sur la classe. L'attribut accepte des parametres pour personnaliser les operations disponibles, les groupes de serialization, les filtres et les regles de validation. Avec Symfony Flex, un projet API Platform minimal est operationnel en moins de 10 minutes : l'installation configure le routing, le serializer, la documentation OpenAPI et le panneau d'administration. La documentation interactive Swagger UI est immediatement accessible a l'URL /api et liste toutes les ressources exposees avec leurs operations, leurs parametres et leurs schemas de donnees.
#Serialization groups : controler les donnees exposees
La serialization est le mecanisme qui determine quelles proprietes d'une entite sont incluses dans la reponse JSON. Sans controle, API Platform expose toutes les proprietes de l'entite, y compris celles que vous ne voulez pas rendre publiques (hash de mot de passe, identifiants internes, relations sensibles). Les serialization groups resolvent ce probleme en permettant de definir quels champs sont inclus dans quel contexte. Vous definissez des groupes avec l'attribut Groups du composant Serializer sur chaque propriete, puis vous specifiez dans l'attribut ApiResource quels groupes sont utilises pour la lecture (normalization) et l'ecriture (denormalization). Par exemple, un groupe read expose le nom, le prenom et l'email d'un utilisateur en lecture, tandis qu'un groupe write autorise la modification du nom et du prenom mais pas de l'email. Un groupe admin expose des champs supplementaires (date de creation, role, derniere connexion) visibles uniquement pour les administrateurs. Cette granularite est essentielle pour les API B2B ou differents partenaires ont des niveaux d'acces differents aux donnees. Chez Nehos, nous definissons systematiquement au minimum trois groupes de serialization par entite : read pour la lecture publique, write pour l'ecriture, admin pour l'administration interne. Cette convention facilite la maintenance et l'onboarding des nouveaux developpeurs sur le projet.
#Pagination, filtres et tri : les donnees a la carte
API Platform integre nativement la pagination, le filtrage et le tri des collections sans aucun code supplementaire. La pagination est activee par defaut avec 30 elements par page et utilise le format Hydra (JSON-LD) pour fournir les liens de navigation (premiere page, page suivante, derniere page, nombre total d'elements). Le client peut ajuster le nombre d'elements par page via le parametre itemsPerPage dans la query string. Les filtres sont la fonctionnalite qui differencie API Platform d'une API basique. Vous pouvez ajouter des filtres de recherche (SearchFilter pour les correspondances exactes, partielles ou par prefixe), des filtres de plage (RangeFilter pour les dates, les montants), des filtres booleens (BooleanFilter) et des filtres d'existence (ExistsFilter pour verifier si une relation existe). Chaque filtre se configure via un attribut ApiFilter sur l'entite ou via la configuration YAML. Le tri est gere par OrderFilter qui permet au client de trier les resultats sur n'importe quelle propriete autorisee via le parametre order dans la query string. Tous ces filtres sont automatiquement documentes dans la specification OpenAPI, ce qui signifie que le frontend developer ou le partenaire API peut les decouvrir dans Swagger UI sans lire la documentation technique. C'est un gain de productivite considerable pour les equipes qui consomment l'API.
→ Pour aller plus loin : découvrez nos outils gratuits — calculateurs ROI, diagnostics techniques et quiz interactifs pour affiner votre réflexion.
#GraphQL avec API Platform : une alternative au REST
API Platform supporte nativement GraphQL en plus de REST, sans duplication de code. L'activation se fait via le package api-platform/graphql et la configuration ajoute automatiquement un endpoint /api/graphql avec un playground interactif GraphiQL. Les avantages de GraphQL pour les API B2B sont significatifs. Le client peut demander exactement les champs dont il a besoin, eliminant le probleme de sur-fetching (recevoir plus de donnees que necessaire) et de sous-fetching (devoir faire plusieurs requetes pour obtenir les donnees liees). Les mutations GraphQL remplacent les verbes HTTP pour la creation et la modification. Les subscriptions permettent des notifications en temps reel. En pratique, nous recommandons GraphQL pour les cas d'utilisation ou le frontend est complexe et necessite des requetes flexibles (dashboards avec de nombreux widgets, applications mobile qui doivent economiser la bande passante). Pour les API d'integration B2B avec des partenaires, REST reste souvent preferable car il est plus largement compris et ne necessite pas de client specifique. API Platform permet de supporter les deux protocoles simultanement sur les memes entites, ce qui offre une flexibilite maximale sans duplication de code ni de logique metier.
→ Pour aller plus loin : découvrez nos outils gratuits — calculateurs ROI, diagnostics techniques et quiz interactifs pour affiner votre réflexion.
#Authentification JWT et securite de l'API
Une API de production necessite une authentification robuste. API Platform s'integre parfaitement avec le composant Security de Symfony et le bundle LexikJWTAuthenticationBundle pour l'authentification par token JWT. Le flux d'authentification est le suivant : le client envoie ses identifiants (email et mot de passe) a un endpoint /api/login_check, le serveur verifie les identifiants et retourne un token JWT signe, le client inclut ce token dans le header Authorization de chaque requete subsequente. La configuration comprend la generation d'une paire de cles RSA pour signer les tokens, la configuration du TTL (time-to-live) du token (generalement 1 heure pour le access token et 30 jours pour le refresh token) et la definition des regles d'acces par operation dans le security de Symfony. Au-dela du JWT, une API de production doit implementer le rate limiting pour prevenir les abus. Symfony 7 integre un composant RateLimiter natif qui permet de definir des limites par IP, par utilisateur ou par endpoint. Nous recommandons les limites suivantes pour une API B2B : 100 requetes par minute par utilisateur pour les endpoints de lecture, 20 requetes par minute pour les endpoints d'ecriture, 5 tentatives par minute pour l'endpoint de login. Ces limites protegent l'API contre les attaques par force brute et les clients mal configures qui envoient des requetes en boucle.
#Doctrine ORM : optimiser les requetes pour la performance
API Platform repose sur Doctrine ORM pour l'acces aux donnees. Cette integration est puissante mais peut generer des problemes de performance si les relations entre entites ne sont pas correctement gerees. Le probleme le plus frequent est le N+1 queries : pour une collection de 30 elements avec une relation, Doctrine execute 1 requete pour la collection puis 30 requetes supplementaires pour charger chaque relation. La solution est d'utiliser les eager loading extensions d'API Platform ou de definir des custom data providers qui utilisent des jointures optimisees. Nous recommandons de toujours activer le Symfony Profiler en developpement et de surveiller le panneau Doctrine pour detecter les N+1 queries. Chaque endpoint de collection doit etre teste avec un volume realiste de donnees (1 000 a 10 000 elements) pour valider les performances avant la mise en production. Les autres optimisations essentielles comprennent l'utilisation de DTOs (Data Transfer Objects) pour les endpoints complexes qui ne correspondent pas directement a une entite, la mise en cache HTTP avec les headers Cache-Control et ETag pour les ressources qui changent rarement et l'utilisation de Varnish ou Symfony HTTP Cache en reverse proxy pour absorber la charge sur les endpoints les plus sollicites.
#Tests Behat : valider les contrats d'API
Une API sans tests est une API qui casse en silence. Behat, combine avec le contexte API Platform, permet d'ecrire des tests fonctionnels en langage naturel qui valident le comportement de chaque endpoint. Un scenario Behat typique pour un endpoint de creation ressemble a ceci : etant donne que je suis authentifie en tant qu'administrateur, quand j'envoie une requete POST vers /api/products avec un body JSON contenant les champs requis, alors le code de reponse doit etre 201, et la reponse doit contenir le champ id, et le produit doit exister en base de donnees. Les tests Behat couvrent plusieurs dimensions : la validation des codes HTTP pour chaque operation (200, 201, 204, 400, 401, 403, 404), la validation du schema de reponse (champs presents, types corrects), la validation des regles de securite (un utilisateur non authentifie recoit un 401, un utilisateur sans permission recoit un 403), la validation de la pagination (nombre d'elements, liens de navigation) et la validation des filtres (les resultats filtres correspondent aux criteres). Chez Nehos, chaque endpoint API est couvert par au minimum 5 scenarios Behat : le cas nominal (happy path), les cas d'erreur de validation (champs manquants, types incorrects), les cas de securite (acces non autorise) et les cas limites (collection vide, element inexistant). Cette couverture de tests est incluse dans nos prestations de developpement et maintenue dans le cadre de la TMA.
#Conclusion : API Platform, le standard pour les API PHP d'entreprise
API Platform transforme la construction d'API PHP d'un exercice d'artisanat en un processus industrialise. La documentation automatique, la serialization configurable, la pagination et le filtrage natifs, le support GraphQL et l'integration Symfony native en font un outil indispensable pour toute equipe PHP qui construit des API de production. Le temps economise sur le boilerplate est reinvesti dans la logique metier, la securite et les tests. C'est exactement l'approche que nous appliquons chez Nehos sur chaque projet API B2B.