Matthieu Werner — L’IA au service de vos projets API Platform#
Matthieu Werner déroule un cas pratique : construire un site de projet de bout en bout avec de l’IA, du cadrage au déploiement. Après un rappel sur l’évolution de l’IA et son adoption en entreprise, il enchaîne les étapes d’un projet typique en montrant où brancher quel outil.
- 1
Cadrage fonctionnel
ChatGPT pour générer une liste de fonctionnalités, puis Notion AI pour organiser le backlog et un tableau Kanban. - 2
Architecture & design
Lucidchart pour les schémas d’architecture, Figma AI pour l’aspect graphique. - 3
API
ChatGPT pour générer le schéma OpenAPI, puis un générateur d’API à partir du schéma. React Admin (compatible API Platform) pour l’admin. - 4
Code & tests
GitHub Copilot et Cursor comme assistants de code, génération de tests depuis les fichiers sources, et GitHub Actions boostées à l’IA pour la CI.
L’IA fait gagner un temps considérable sur les tâches récurrentes, mais : outils souvent payants, risque de réponses incorrectes, et complexité de gestion quand on empile les services. À utiliser avec discernement.
Sergès Goma — How dev became villains#
Après un ice breaker mémorable sur nos evil laughs, Sergès Goma pose une question dérangeante : les développeur·se·s sont-ils devenus des villains ? L’IA aux comportements biaisés (racisme, sexisme), les affaires FTX, Telegram… autant d’exemples que le code peut servir à des fins malveillantes.
Qui sont vraiment les stakeholders du logiciel ?#
- Les end users
- Les gouvernements
- Les organisations et clients
- Les développeur·se·s eux-mêmes
- Les 3rd parties
Nous avons une responsabilité collective dans ce que nous construisons et dans l’impact sur la société.
Démissionner pour refuser une mission problématique… n’est pas toujours une option. D’où l’importance de se poser la question avant d’accepter.
Allison Guilhem — Gestion des messages et notifications en temps réel avec API Platform#
Allison Guilhem décortique le temps réel avec API Platform, en partant du socle HTTP :
- HTTP/1.1 introduit les connexions persistantes.
- HTTP/2 apporte binaire, multiplexing et server push.
- HTTP/3 contourne les limites de TCP via UDP (QUIC) avec un chiffrement natif.
Les techniques de communication temps réel#
- Polling / Long Polling : simple et universel, pas de connexion persistante nécessaire.
- Server-Sent Events (SSE) : facile à mettre en œuvre, basé sur HTTP, reconnexion auto, unidirectionnel.
- WebSocket : bidirectionnel, faible latence, binaire ou texte — mais plus complexe, moins bien aligné avec HTTP/2/3, et comporte des défis de scalabilité et de sécurité.
La solution : Mercure#
Mercure, créé par Kévin Dunglas, s’appuie sur SSE et coche toutes les cases : reconnexion/synchronisation automatiques, sécurisation par JWT, haute performance, compatibilité GraphQL et hypermédias, chiffrement intégré.
Allison illustre le tout avec un casino en ligne : détection d’actions interdites (fraude, connexions depuis
des pays restreints), notifications instantanées sur un dashboard admin. L’intégration avec FrankenPHP se fait
en installant MercureBundle, en configurant les ressources API Platform et en déclenchant les updates sur les endpoints.
Au-delà de l’UX, le temps réel transforme la manière dont on interagit avec la donnée elle-même : plus seulement la consulter, mais y réagir à l’instant.
Mathias Arlaud — Accélérer la sérialisation avec API Platform#
« Représenter des structures de données dans un format pouvant être envoyé ou persisté, afin d’être reconstruit plus tard. »
Mathias Arlaud rappelle qu’en API, chaque requête passe par un entonnoir : Provider → Processor → (dé)sérialisation. Comme API Platform s’appuie sur le Serializer Symfony, on hérite de ses performances… et de ses limites.
Le principe : “Metadata is data, but about data”#
Plus on en sait sur la donnée, plus on peut l’exploiter efficacement. Avec une classe Rain typée via PHPDoc génériques :
/** @template T of string */
final class Rain {
/** @return list<T> */
public function content(): array {}
}
/** @var Rain<'cat'|'dog'> $englishRain */
$englishRain = new Rain();Problème : le PropertyTypeExtractor historique de Symfony ne gère ni unions, intersections, listes/dictionnaires,
ni génériques. D’où le nouveau composant TypeInfo, qui lit propriétés, retours de méthode et PHPDoc en finesse.
JsonEncoder + streaming#
À cela s’ajoute un JsonEncoder qui s’appuie sur TypeInfo et sur le streaming : au lieu de tout charger en mémoire, chaque élément est écrit progressivement, créant un encoder optimisé à la volée.
final class Cat {
public string $name;
public bool $flying;
}{
"name": "Mittens",
"flying": false
}Une ressource = une représentation#
Les #[Groups] permettent de projeter plusieurs vues sur la même ressource, mais multiplient les combinaisons.
API Platform pousse plutôt vers une ressource dédiée par contexte (CatGet, CatPost), avec le composant
ObjectMapper et les attributs #[Map] pour factoriser les transformations sans boilerplate.
Jusqu’à ×40 sur l’encodage via le nouveau JsonEncoder, ×20 côté ObjectMapper, et ×10 en désérialisation. Certains composants (TypeInfo, ObjectMapper) ne sont pas encore stabilisés mais la direction est claire.
François Zaninotto — API Platform Admin: The Ultimate Admin Generator#
François Zaninotto (créateur de react-admin, 25k★) démonte en live quatre promesses du générateur d’admin API Platform :
- 1
CRUD facile, sans code
Une entité, quelques attributs, et le CRUD apparaît dans l’admin. Point. - 2
Zéro code JavaScript
Avec#[ApiFilter]et quelques IRI dans le schéma, l’admin se met à jour tout seul — doc comprise. Avec Mercure, les changements sont même diffusés en live à tous les utilisateurs connectés. - 3
Étendre via une API JS simple
Pas moyen de choisir les champs via PHP uniquement. Le code généré est dumpé dans la console avec des instructions pour l’override. On modifie le composant, on ajuste props/labels/tri, et c’est en place. - 4
Remplacer n’importe quelle partie par un composant React custom
On délaisseFieldGuesser/ListGuesser/EditGuesserpour les composants explicites (List,Datagrid,Edit…). Plus de guess, plus de contrôle.
La richesse de react-admin#
François met en avant des composants prêts à l’emploi : PrevNextButton, TranslatableInputs, MenuLive
(badges temps réel), FilterList, RevisionsButton, WizardForm multi-étapes, et même des calendriers.
Un ancêtre existait déjà pour Symfony 1 (ng-admin + Bootstrap), avec les limites du YAML et du JS verbeux. React-admin bascule en headless et laisse choisir la librairie UI (shadcn, Tailwind, etc.) — quelqu’un en a même tiré un clone Spotify.
Frédéric Bouchery — Adopter un lapin (RabbitMQ)#
Frédéric Bouchery partage son REX sur RabbitMQ avec API Platform.
Il commence par les fondamentaux : création des queues, cycle de vie des messages, stratégies ack/nack,
et un rappel important : ne jamais présumer que les messages seront consommés dans l’ordre.
Deux idées fausses à corriger#
- On ne publie pas directement dans une queue, mais sur un échangeur qui route vers les bonnes queues (potentiellement avec des tags/filtres).
- Trop souvent, RabbitMQ est utilisé comme un simple Symfony Messenger : un échangeur, une queue, un consommateur. Dommage, il est conçu pour du parallélisme bien plus riche.
L’intégrer dans API Platform#
- Installer Symfony Messenger et le transport RabbitMQ.
- Déclarer
messengerdans l’attribut d’opération API Platform pour router l’appel vers un message. - Problème : la réponse est vide. Solution : décorer le
PersistProcessorpour persister ET envoyer le message, en conservant la réponse de l’endpoint. - Pour les messages eux-mêmes : MessageSerializer custom ou — mieux — DTO partagés entre producteur et consommateur plutôt que des entités Doctrine.
Table ronde — Le marché de l’emploi#
Avec Clément Talleu, Jeanne Londiche et Olivier Mansour, discussion franche sur l’état du marché.
Les constats#
- Freelances : marché tendu, de plus en plus de retours vers le CDI. Beaucoup de jeunes diplômés étaient partis trop vite en freelance, séduits par les TJM.
- Post-COVID : e-commerce et divertissement avaient explosé — repli marqué aujourd’hui.
- Salaires : stagnation pour les juniors et confirmés (baromètre AFUP).
- Attractivité : Les-Tilleuls.coop paye en-dessous du marché mais attire grâce à son modèle coopératif. Télétravail et semaine de 4 jours restent des arguments forts.
- Langages : PHP est moins recherché seul ; les entreprises veulent des profils polyvalents.
Veille technologique et projets perso, oui — mais sur son temps pro idéalement. Les entreprises devraient proposer du mentorat pour les juniors plutôt que de compter sur le temps libre.
Smaïne Milianni — Comment se sortir du legacy ?#
Smaïne Milianni propose une feuille de route claire pour s’attaquer au code legacy — qu’il s’agisse de vieux code, de code sans tests, ou de code qui rapporte mais qu’on n’ose plus toucher.
Les caractéristiques d’un bon test (FIRST)#
- Rapide : exécution éclair.
- Isolé : pas d’interférence entre tests.
- Répétable : local = CI.
- Auto-validant : succès/échec évident.
- Exhaustif : scénarios couverts largement.
Les outils#
- Deptrac pour visualiser et contraindre les dépendances entre modules.
- Rector pour automatiser le refactoring via règles.
Les principes à (re)garder en tête#
- “Make it work, then make it clean.”
- KISS, SOLID, DRY
- Design patterns uniquement quand c’est vraiment nécessaire (Strategy, Adapter, Decorator…).
- Architectures : Clean, Hexagonal, Onion, CQRS, MVC — à choisir selon le besoin.
- Fin du “Array Oriented Programming” : DTO partout ! (SQL, HTTP, commandes…).
- Boy Scout rule : laisser le code dans un meilleur état que celui trouvé.
- Dépendances à jour (via Renovate ou manuel régulier).
Les pièges à éviter sur un projet legacy#
- Ne modifiez jamais du code sans le comprendre.
- Ne changez pas plusieurs choses en même temps.
- Ne travaillez jamais seul·e sur du legacy.
- Ne réécrivez pas intégralement sans tests.
- Attaquez les opérations de lecture avant les écritures (moins risqué).
Stratégies éprouvées#
- Mikado Method : découper un gros refactoring en petites étapes.
- Golden Master Testing : capturer le comportement actuel pour le comparer après refactoring.
- Smoke Tests : vérifier que l’essentiel tient debout après chaque étape.
Il appartient à l’équipe et aux futures générations qui devront le maintenir. Chaque modification doit être validée collectivement.
Côté management#
Auditer, documenter, planifier, tester, avancer par petits pas, communiquer, déployer, monitorer… et recommencer. Le refactoring est un processus continu, pas un projet one-shot.
Boas Falke — Automating builds with FrankenPHP#
Boas Falke présente FrankenPHP comme un service unique pour exécuter PHP — en prod, en CI, en dev.
Les atouts#
- Homogénéité Prod / CI / Dev.
- Caddy custom, avec des fonctionnalités additionnelles embarquées.
- Mode worker pour les performances.
- Support des HTTP 103 Early Hints.
- Distribution sous forme de binaire statique, sans dépendances externes.
Construire son binaire statique#
- 1
Base : image static builder
Partir de l’imagestatic-builderofficielle. - 2
Préparer les sources
Archiver les fichiers nécessaires, définir les variables d’environnement, supprimer les dossiers inutiles (tests…). - 3
Dépendances et env
Installer les dépendances requises et exécuterdump-env prod. - 4
Build
Préciser l’emplacement de l’app, les extensions PHP voulues, puis lancer le script.shde build. - 5
Artifact
Pousser le binaire comme artifact GitLab (ou autre CI/CD).
Démo live avec Mailpit#
Démo bluffante : un fichier est déposé → le binaire déclenche un envoi d’email capturé par Mailpit. Preuve que le binaire interagit nativement avec le système de fichiers et les tâches programmées.
Un seul binaire, zéro dépendance externe, performances au rendez-vous : FrankenPHP simplifie radicalement la distribution d’apps PHP.
API Platform Conference 2024 — Le mot de la fin#
L’API Platform Conference 2024 a une nouvelle fois tenu toutes ses promesses. Les conférences étaient de qualité, la table ronde s’est révélée passionnante et a suscité des échanges enrichissants. Comme toujours, l’organisation était irréprochable, permettant de profiter pleinement de chaque moment. Sans oublier l’excellent apéro, propice à prolonger les discussions dans une ambiance chaleureuse et détendue.
Une édition à la hauteur des attentes, vivement la prochaine !
À très vite ! 👋

