Conception et développement d'une API pour Cora Informatique

Contexte du projet

Le client

Le client est Cora Informatique

Le besoin du client

Le projet d’applications mobile iOS et Android permettant d’offrir les fonctionnalités e-commerce du site Cora drive nécessitait la conception d’une API REST. Il fallait trouver quel framework adopter et quelle solution mettre en place pour reprendre le code existant, non objet, partiellement factorisé, et contenant des classes aux responsabilités mal séparées.

Exemples d'actions

  • ● Choisir un micro framework facilitant la création d’une API REST 
  • ● Analyser et migrer le code métier existant 
  • ● Imposer un cadre pour le format Json, l’authentification OAuth2 et la particularité de REST pour les développeurs mobiles
  • ● Définir de nouveaux outils : git, gitlab, composer, workflow de développement, intégration et déploiement continus
Notre intervention
Après une courte période d’immersion dans l’équipe et le fonctionnement du site drive, le projet a connu un enchaînement de plusieurs phases :
 
> Modernisation des outils de développement :
● Utilisation de git à la place de svn
● Mise en place d’un serveur gitlab privé
● Définition et explication du workflow à adopter (branches, release, hotfix…)
● Utilisation de composer et formation au semantic versionning
● Mise en place de merge request / revue de code
● Tracking des releases, des issues associées
 
> Présentation et adoption de la nouvelle architecture :
● Micro-framework Lumen (basé sur Laravel)
● Librairie Dingo Api pour cadrer l’API REST, la documentation automatique, le format Jsonapi, facilité de versionning de l’API
● Création d’un SDK Drive et SDK Client pour y écrire le nouveau code migré du site couvrant les besoins respectifs du eCommerce et de la gestion des comptes clients. Ces deux vendors PHP sont utilisés par l’API et devront pouvoir être également utilisable par un projet futur de refonte technique du site drive
● Authentification Oauth2
● Cache avec Redis à haut niveau (transformation json obtenue en réponse de l’API) et à bas niveau (sérialisation d’objets/hydratation)
● Utilisation de composants éprouvés pour couvrir les besoins en remplacement du code maison (zend-db, validations symfony, container de dépendances…)
 
> Mise en place d’intégration et déploiement continus :
● POC sur des tests unitaires
● Écriture de tests fonctionnels au niveau de l’API
● Contrôle automatisé des failles de sécurité sur les vendors
● Injection des variables d’environnement propres à chaque branche et déploiement
● Création d’un package déployé et synchronisé sur les serveurs
 
> Mise en place d’un nouveau serveur de ressources Nginx : 
● En charge du redimensionnement des images produits/catégories et du reste de la structure de vente
● En charge de la mise en cache des images générées
● Restriction sur les formats dynamiques demandés