Soutenance
Titre : Architecte Logiciel

Maxence POUTORD

29/10/2015

Contexte

Objectif de l'application

Workflows

Problématique

“Enjeux d’une architecture orientée services
dans le cadre du développement d’une application web”

Plan

  • Introduction
  • I — Présentation de l'application
  • II — Consommer des services
  • III — Exposer des services
  • Conclusion et échanges

Définition

I — Présentation de l'application

Utiliser un framework JavaScript ?

Symfony2

  • Framework MVC PHP
  • Critères de choix :
    • Popularité/Communauté
    • Sécurité
    • Documentation
  • Approche en tout module (Bundle)
  • Outils de génération de code

Fonctionnement des services sous Symfony2

  • Fonctionnalité qui effectue une tâche globale
  • Fonctionne grace au mécanisme d’injection de dépendances
    Instanciation lors de l'appel du service (Principe d’Hollywood)

II — Consommer des services

Protocole SOAP

  • Simple Object Access Protocol
  • Protocole qui permet l’échange de données entre deux applications distantes
  • Données au format XML

Problèmes rencontrés

  • Services web génériques et peu adaptés à l'utilisation souhaitée
  • Impossibilité d'en créer des spécifiques
  • Requêtes lourdes
  • Penser l'architecture autrement
  • Peu de documentation
  • Documenter les services utilisés
  • Centraliser toutes les fonctions des services web
  • Créer un service Symfony2

Création d’un service Symfony2

  • Eviter la duplication de code
  • Utilisation de web services transparente dans le code d’un contrôleur
    • Propreté du code
    • Maintenabilité

III — Exposer des services

REST et le modèle de maturité de Richardson

— Niveau 0 : “Bon vieux XML” —

  • HTTP tunnelise les requêtes
  • Requêtes de type POST uniquement
  • Un seul point d'entrée :
    http://application.fr/api/stages (gérera tous les stages)
  • Exemple : SOAP et XML-RPC

— Niveau 1 : Ressources —

  • Apparition de la notion d'identité d'objet
  • Une URI par ressource
  • Exemple :
    • http://application.fr/api/stages/Z700
    • http://application.fr/api/stages/Z700/sessions/1001

— Niveau 2 : Verbes HTTP —

  • Côté client : utilisation des verbes HTTP
    Exemple : GET, POST, PUT et DELETE...
  • Côté serveur : utilisation des codes HTTP
    Exemple : 200, 201, 403, 404, 500...

— Niveau 3 : HATEOAS (contrôles hypermédias) —

  • Hypertext As The Engine Of The Application State
  • Précondition à REST

HATEOAS (1/2)


<stage id="42">
  <code>Z700</code>
  <libelle>L'essentiel sur l'énergie Gaz</libelle>
  <sessions>
    <session id="1001">
      <date-debut>14-12-2015</date-debut>
      <places-disponibles>5</places-disponibles>
    </session>
    <session id="1024">
      <date-debut>18-01-2016</date-debut>
      <places-disponibles>0</places-disponibles>
    </session>
  </sessions>
</stage>

HATEOAS (2/2)


<stage id="42">
  <code>Z700</code>
  <libelle>L'essentiel sur l'énergie Gaz</libelle>
  <sessions>
    <session id="1001">
      <date-debut>14-12-2015</date-debut>
      <places-disponibles>5</places-disponibles>
      <link rel="details"     href="http://application.fr/api/stages/Z700/sessions/1001/details" />
      <link rel="inscription" href="http://application.fr/api/stages/Z700/sessions/1001/inscription" />
    </session>
    <session id="1024">
      <date-debut>18-01-2016</date-debut>
      <places-disponibles>0</places-disponibles>
      <link rel="details"     href="http://application.fr/api/stages/Z700/sessions/1024/details" />
    </session>
  </sessions>
  <links>
    <link rel="self"  href="http://application.fr/api/stages/Z700" />
    <link rel="fiche" href="http://application.fr/api/stages/Z700/fiche" />
  </links>
</stage>
		

Exposer ses données

  • Des bundles permettent de sérialiser des objets
  • Comment aggréger des objets ?
    Exemple : si l'objet dispose de données sensibles...

Le pattern d’objets de transfert de données (DTO)

Conclusion

Les architectures orientées services permettent aux applications de se recentrer sur leur cœur de métier.

Gains

  • Clients :
    • L'application répond mieux à leurs besoins
    • Amélioration de l'expérience utilisateur
    • Site web adaptatif (responsive web design)

  • Entreprise :
    • Gain de temps pour la mise à jour des données
    • SI monolithique SI plus communicatif
    • Fonctionnalités accrues (mesure d’audience web, base de données accessible...)

Apprentissages

  • Ne pas réinventer la roue avec le principe de bundle de Symfony2
  • Consommer, exposer et documenter des services web
  • Être pragmatique
  • Fierté d'avoir mené ce projet de A Z
    ... même si cela n'a pas été facile tous les jours !
  • Satisfaction que l'application continue de servir

Échanges