Retour à l’expérience Carter-Cash

Carter-Cash

Intégrations & flux de données

01 / 5

CADRAGE & MODÉLISATION

Transformer un besoin d’échange en solution technique

Faire correspondre une commande e-commerce aux données attendues par un système externe

Carter-Cash souhaitait transmettre ses commandes à Datahub. Derrière cet objectif se trouvait un ensemble de données réparties dans le modèle existant : commande, expéditions, client, magasin, produits, tarifs, historique et modes de livraison.

J’ai analysé ces différentes sources, identifié les informations nécessaires et défini leur transformation vers le format attendu par Datahub. J’ai ensuite conçu le parcours complet de l’échange, depuis l’événement déclencheur dans la vie de la commande jusqu’à la construction et à l’envoi authentifié des données.

  • Modélisation
  • API
  • Données métier

02 / 5

ARCHITECTURE ASYNCHRONE

Faire circuler les données sans bloquer l’application

Découpler l’envoi des commandes pour qu’un service externe ne ralentisse pas le parcours principal

L’envoi vers Datahub ne devait pas être exécuté directement pendant une action utilisateur ou une transition métier importante. Une réponse lente ou une indisponibilité du service externe aurait alors pu bloquer inutilement le fonctionnement du site.

J’ai choisi une architecture asynchrone basée sur Symfony Messenger. Lorsqu’une commande atteint l’état concerné, un message est placé dans une file dédiée. Un worker le traite ensuite indépendamment, recharge les informations nécessaires et effectue l’envoi vers Datahub. L’action qui a déclenché l’échange peut donc se terminer normalement, même si le service externe répond lentement ou devient indisponible.

  • Symfony Messenger
  • Asynchrone
  • Découplage

03 / 5

ERREURS & TRAÇABILITÉ

Ne jamais laisser un flux échouer silencieusement

Conserver chaque échec avec assez de contexte pour le comprendre et reprendre l’échange

Un envoi asynchrone vers Datahub peut échouer loin du parcours de commande qui l’a déclenché. Sans mécanisme dédié, les données d’une commande pourraient ne jamais parvenir au service sans que l’erreur soit immédiatement visible ou facilement reproductible.

J’ai mis en place un suivi persistant des échecs pour chaque expédition concernée : statut retourné, nombre de tentatives et date du dernier essai. Des logs dédiés conservent également l’origine du déclenchement et le contexte utile au diagnostic. Lorsqu’un nouvel envoi aboutit, l’échec précédemment enregistré est automatiquement levé.

  • Traçabilité
  • Logs
  • Gestion des erreurs

04 / 5

BACK-OFFICE & EXPLOITATION

Rendre les intégrations visibles et actionnables

Donner aux équipes une vue claire des échanges en erreur et un moyen sûr de les relancer

Le suivi des envois vers Datahub ne pouvait pas reposer uniquement sur des logs : leur consultation serait restée réservée aux développeurs et les incidents auraient été difficiles à retrouver dans la durée. J’ai donc proposé une interface dédiée dans le back-office, où les traitements en échec deviennent directement visibles.

Cette vue rassemble les informations utiles au diagnostic : commande concernée, expédition, statut, nombre d’échecs et dernier essai. Une action permet de relancer manuellement l’envoi en réutilisant le même service que le traitement automatique. En cas de succès, l’erreur disparaît ; sinon, son suivi est actualisé.

  • Sonata Admin
  • Observabilité
  • Reprise manuelle

05 / 5

RÉALISATION TECHNIQUE

Sous le capot des intégrations

L’intégration Datahub associe la transformation d’un modèle métier riche, un appel HTTP authentifié, un traitement asynchrone et un dispositif de suivi accessible depuis le back-office. J’ai séparé ces responsabilités afin que chaque partie puisse évoluer et être diagnostiquée indépendamment

  • Symfony
  • Messenger
  • Sonata

Construction et envoi

Un builder transforme les commandes et leurs expéditions dans le format attendu. Un client basé sur Symfony HttpClient obtient un jeton d’accès, envoie les données et interprète la réponse du service externe.

Traitement asynchrone

Une évolution de l’état de la commande déclenche un message Symfony Messenger. Un handler recharge ensuite l’expédition et délègue l’envoi à un service commun, utilisé également lors des reprises manuelles.

Erreurs et exploitation

Doctrine conserve les échecs et leurs tentatives, tandis qu’un canal Monolog dédié fournit le contexte technique. Sonata Admin expose ces informations et permet de relancer un envoi sans dupliquer la logique métier.

Autres intégrations

J’ai également exploré l’API Woop pour remplacer une ancienne source de points relais. J’ai identifié les données nécessaires : la localisation, l’identité du point, les horaires et les catégories de colis acceptées, puis réalisé l’essentiel de leur intégration dans le parcours de livraison.

  • Symfony Messenger
  • HttpClient
  • OAuth 2.0
  • Doctrine
  • Monolog
  • Sonata Admin
  • Woop