↓ Aller au contenu
  1. Actualités/

L’API Platform Conference 2024 à Lille

·2052 mots·10 mins
L’édition 2024 de l’API Platform Conference nous a embarqué·e·s au cœur de l’écosystème API Platform pendant deux journées denses à Lille. Entre keynotes, retours d’expérience, deep dives techniques et table ronde, l’équipe AKAWAKA a capté les tendances et les bonnes idées à ramener dans vos projets. Voici notre sélection des talks les plus marquants.

Matthieu Werner — L’IA au service de vos projets API Platform
#

IA Productivité Outils

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. 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. 2

    Architecture & design

    Lucidchart pour les schémas d’architecture, Figma AI pour l’aspect graphique.
  3. 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. 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.
À retenir

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
#

Éthique Responsabilité Soft skills

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é.

Note d’humour (et de lucidité)

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
#

Temps réel Mercure SSE FrankenPHP

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.

Le temps réel, pas juste un gadget

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
#

Sérialisation TypeInfo JsonEncoder Performance

« 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 :

Rain.php
/** @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.

Cat.php
final class Cat {
    public string $name;
    public bool $flying;
}
cat.json
{
    "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.

Les gains annoncés

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
#

Admin React Admin No-code

François Zaninotto (créateur de react-admin, 25k★) démonte en live quatre promesses du générateur d’admin API Platform :

  1. 1

    CRUD facile, sans code

    Une entité, quelques attributs, et le CRUD apparaît dans l’admin. Point.
  2. 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. 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. 4

    Remplacer n’importe quelle partie par un composant React custom

    On délaisse FieldGuesser/ListGuesser/EditGuesser pour 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.

Pourquoi react-admin ?

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)
#

RabbitMQ Messenger Asynchrone

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 messenger dans 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 PersistProcessor pour 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
#

Emploi Salaires Freelance

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.
Pour se démarquer en tant que dév

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 ?
#

Legacy Clean Code Refactoring Tests

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.
Le code ne vous appartient pas

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
#

FrankenPHP Caddy Binaire statique CI/CD

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. 1

    Base : image static builder

    Partir de l’image static-builder officielle.
  2. 2

    Préparer les sources

    Archiver les fichiers nécessaires, définir les variables d’environnement, supprimer les dossiers inutiles (tests…).
  3. 3

    Dépendances et env

    Installer les dépendances requises et exécuter dump-env prod.
  4. 4

    Build

    Préciser l’emplacement de l’app, les extensions PHP voulues, puis lancer le script .sh de build.
  5. 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.

La promesse

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 ! 👋

Un projet API Platform à lancer, migrer ou accélérer ?

Temps réel avec Mercure, sérialisation performante, sortie du legacy, FrankenPHP : nos experts Symfony vous accompagnent sur vos API.
Découvrir notre expertise Symfony