Nous avons dĂ©veloppĂ© et maintenu lâAPI de donnĂ©es produits pour Migros pendant 10 ans, en adoptant pleinement le dĂ©veloppement agile. Nous avons mis en ligne la premiĂšre version en seulement six mois, puis continuĂ© Ă ajouter des fonctionnalitĂ©s et Ă nous adapter aux exigences changeantes et aux systĂšmes tiers.
AprĂšs 10 ans, Migros a crĂ©Ă© une Ă©quipe interne pour reprendre le dĂ©veloppement en interne. Durant les deux derniĂšres annĂ©es de notre collaboration, nos dĂ©veloppeur·euse·s ont travaillĂ© Ă©troitement avec lâĂ©quipe interne en pleine croissance, transfĂ©rant progressivement le savoir-faire et les responsabilitĂ©s. En 2024, Migros avait entiĂšrement repris le projet.
Lâapplication est un systĂšme central permettant un accĂšs en temps rĂ©el Ă toutes les donnĂ©es produits. Elle collecte des informations provenant dâenviron 30 applications mĂ©tiers, allant de systĂšmes SAP et dâAPI REST Ă des fichiers CSV. Les donnĂ©es collectĂ©es sont filtrĂ©es, prĂ©parĂ©es et stockĂ©es dans un cluster Elasticsearch. Les applications peuvent soit interroger les donnĂ©es via des appels REST en temps rĂ©el, soit sâabonner Ă un message bus global pour synchroniser les mises Ă jour.

Stratégie
DĂšs le dĂ©but, nous avions une vision architecturale claire pour lâAPI. Nous avons rĂ©ussi Ă garder le code moderne et maintenable grĂące Ă des refactorings rĂ©guliers, en adoptant de bonnes pratiques:
- Tests unitaires et fonctionnels
- PHPStan: Analyseur statique pour détecter les bugs potentiels
- Code typé (introduit avec PHP 7) pour une meilleure robustesse
- Rector: Refactorisation automatique pour moderniser le code
- PHP-CS-Fixer: Formatage automatique du style de code
Un moment clĂ© fut lorsque le PO nous a encouragĂ© Ă choisir une refactorisation approfondie plutĂŽt quâune solution rapide, garantissant ainsi la maintenabilitĂ© du projet Ă long terme.
Outils
Explorons maintenant quelques outils que nous avons utilisé pour maintenir cette application dans cet environnement en évolution rapide.
Testing
Le code hĂ©ritĂ© est simplement du code sans tests.âMichael C. Feathers
Nous avons mis en place des tests dÚs le début:
- PHPUnit pour les tests unitaires et fonctionnels
- Behat pour les tests end-to-end
- PHPStan pour lâanalyse statique et la dĂ©tection dâerreurs potentielles
En outre, nous avons utilisé l'analyseur statique PHPstan. Cet outil combine le code réel avec les commentaires de la documentation et repÚre des catégories entiÚres d'erreurs potentielles ou d'erreurs d'exécution avant que le code ne soit exécuté. Cet outil pousse les développeurs à écrire un code plus propre et des commentaires de documentation de meilleure qualité. En se plaignant des constructions inutiles, il aide à simplifier le code ou permet au développeur·euse de repérer les erreurs de logique dans le code.
Documentation
Nous avons documenté le projet à plusieurs niveaux:
- Un wiki collaboratif
- Une documentation API interactive
- Des commentaires documentés dans le code
- Un ADR (Architecture Decision Record)
Nous avons Ă©galement utilisĂ© un fixeur automatique de style de code pour garantir la cohĂ©rence et rĂ©duire les distractions liĂ©es au formatage. L'outil permettrait de personnaliser les rĂšgles Ă appliquer ou mĂȘme d'ajouter des rĂšgles personnalisĂ©es. Nous nous sommes mis d'accord sur le jeu de rĂšgles par dĂ©faut de Symfony. Nous nous soucions moins du style exact, mais tenons Ă ce que le style soit cohĂ©rent.