Architecture PHP 3 tier avec Zend en backend de Drupal
Upcoming SlideShare
Loading in...5
×
 

Architecture PHP 3 tier avec Zend en backend de Drupal

on

  • 405 views

Comment allier les fonctionnalités de Drupal et la robustesse de Zend

Comment allier les fonctionnalités de Drupal et la robustesse de Zend

Statistics

Views

Total Views
405
Views on SlideShare
388
Embed Views
17

Actions

Likes
0
Downloads
10
Comments
0

1 Embed 17

http://www.slideee.com 17

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Architecture PHP 3 tier avec Zend en backend de Drupal Architecture PHP 3 tier avec Zend en backend de Drupal Presentation Transcript

  • Architecture PHP 3 tier avec Zend en backend de Drupal PHPTOUR 29 novembre 2012 Thomas DELERM – tdelerm@sigma.fr
  • Sommaire Quel outil pour quel projet ? Un mariage Zend et Drupal ? Les solutions Impact : REST Impact : Mobile / TV Impact : socle, cache et transactions  Discussion       2
  • Conférencier et Résumé - Diplômé des Mines de Douai en 2002, expert en m-commerce - Mise en place d’une plateforme de téléchargement de contenus (groupe Lagardère) - Réalisation de la 1e brique en Europe de t-commerce (paiement pour les sites TV) en 2010-2011 - Référent technique PHP au sein de Sigma Web Solutions. Résumé Dans le monde PHP, les différents frameworks et CMS coexistent sans trop s’interfacer. Pourtant, tirer parti des points forts de chacun permet de travailler plus efficacement. En partant des forces de Zend et de Drupal, cette présentation explique plusieurs façons de brancher les deux outils (notamment via REST), et analyse les mondes ouverts par ce duo : - La création d’applications (mobile ou TV) branchées sur le duo Zend/Drupal - La ré utilisation du code Zend comme un socle de backend projets - La synchronisation des caches Zend et Drupal - Le problème causé par les transactions distribuées A l’aide de courts extraits de code et de schémas, cette présentation donne les bases d’une architecture 3 tier plus proche de ce qui existe en Java. 3
  • Du choix du bon outil Il y a énormément d’outils pour construire un site professionnel - Un framework ? Zend, Symfony, CakePHP, Yii, .. -Un CMS ? Drupal, Joomla, Wordpress, Typo3, Concrete5 .. - Un CMS basé sur un Framework ? Centurion, Sympal .. - Un outil propriétaire ? Medialibs, ASPresso .. Choisir l’un d’eux est comme un mariage. 4
  • Des points forts différents Thème CMS (Drupal) Framework (Zend) Contenus + - Sécurité + + Droits + = Workflow + - Formulaires - = Ergonomie = + Métier - + Mobilité + = Règles de gestion - + Maintenance = + 5
  • Les faiblesses de Drupal à combler  Sa philosophie – Pas d’objets – Corrélativement, pas/peu de tests unitaires – Pas de classes pour gérer le métier – pas de modèles – Mélange des données et des paramètres dans la même DB  Des fonctionnalités pro manquantes – Intégration de données externes : fichiers FTP, email – Sauvegarde des données vers une base métier – Importer des données depuis un web service, puis les utiliser ou les exposer – Reprise sur incident et gestion de queues 6
  • Pourquoi choisir ?  Ce sont des outils pour des sites différents – Drupal est magique pour un site institutionnel, un office de tourisme, un acteur public – Zend excelle avec une forte partie métier, scalabilité avec Zend Server, connexion à du Java..  Pourquoi prendre CMS OU Framework quand on peut avoir les deux ? – Drupal 7 – Zend Framework 1.11 7
  • Mariage ? Crédit www.guillaumebaret.fr + =? 8
  • Architecture d’un Drupal seul Branchement de test unitaires Front office Front office Drupal 77Cœur Drupal Cœur Back office Back office Frontend Frontend Drupal 77 Drupal Modules Modules Communs Communs Drupal 77 Drupal Modules Modules Spécifiques Spécifiques Base Drupal Base Drupal MySQL MySQL Base Métier Base Métier Module Services ::REST client et serveur Module Services REST client et serveur Implémentation Implémentation Implémentation Implémentation des Web Services de l’intégration des Web Services de l’intégration Site mobile Site mobile ou client externe ou client externe Drupal 77 Drupal Spécifique projet Spécifique projet Drupal 77 Drupal Serveur REST Serveur REST pour mobiles pour mobiles FTP ––Fichiers clients FTP Fichiers clients Serveur REST Serveur REST 9
  • Mariage ? Est-ce nécessaire ?  Drupal PEUT gérer du client serveur – Modules additionnels pour cela – Le côté serveur pourrait attaquer la base car le cœur Drupal sait le faire : DAL + Schema API  Drupal PEUT avoir des tests unitaires MAIS  Problème 1 : ré utilisabilité du code – Serveur REST sous Zend = facilement intégrable à côté d’un Drupal. – Réciproque fausse : installer un Drupal entier pour donner une couche serveur REST à du Zend ou à un autre CMS serait complexe.  Problème 2 : scalabilité  Problème 3 : testabilité 10
  • Testabilité Drupal pur Drupal + Zend function displayAllDepots(){ $param1 = $this->getPost(‘param1’); $db = new DbConnection(); $results = $db->query(MyRequests::get(‘getAllDepots’, $param1); $maVue->set(‘depots’,$results); } function displayAllDepots(){ $param1 = $this->getPost(‘param1’); $rc = new RestConnection(); $results = $rc->call(‘getAllDepots’,$param1); $maVue->set(‘depots’,$results); }  Le pseudo code écrit est très similaire mais – Test unitaire facile à faire avec un client REST: on sait tout de suite si le problème vient du front ou du back – Définition claire des signatures de méthodes REST et de la liste de paramètres: cela oblige à réfléchir aux besoins de lecture et écriture sur la base, et à écrire des méthodes génériques • Exemple : au lieu de méthodes getAllDepotsByName et getAllDepotById • Ecriture d’une méthode REST unique getAllDepots(paramètre: valeur dans {id, name}) – Traitement des erreurs centralisé et commun pour toutes les requêtes : nul, vide, requête incorrecte, paramètre manquant.. La brique de requête basée sur Zend_Db est blindée et commune à tous les projets Drupal ou Zend 11
  • Mariage ? Pourquoi Zend  Zend et Drupal sont complémentaires  MVC est adapté pour servir des URLs web service  Pas de base de données « interne » car config dans application.ini  Orienté objet  Zend_Db est associé à un générateur de modèle.  Intégration des vues Twig  Profiter de toute la bibliothèque Zend : Zend_Queue, Zend_Paginator, Zend_Log, Zend_Test_PHPUnit , Zend_Json, appels asynchrones … 12
  • Comment ? 13
  • Faire cohabiter Zend et Drupal  1 Inclure Zend dans Drupal ? – http://drupal.org/project/zend – Réduit Zend à une librairie – MVC de Zend pas utilisé => pas possible d’avoir des APIs routées vers Zend – Possibilité : faire des « redirections » via des hooks mais cela oblige à recoder tout le « routage » de Zend [1] – Pas scalable  NON 14
  • Faire cohabiter Zend et Drupal  2 Zend en maitre  Zend récupère le routage HTTP  Comment « exécuter » Drupal ?  Pas pertinent car Drupal offre une bonne interface backoffice que Zend n’a pas  Comment respecter les hooks Drupal ?  NON ! 15
  • Faire cohabiter Zend et Drupal  3 Zend en tant que Web service – Zend sur le port 8001 – Appel REST (depuis Drupal ou en AJAX directement depuis le client)  4 Appel à Zend depuis Drupal – Les classes Zend sont « includées » et l’application Zend lancée par Drupal – Evite la latence HTTP – Utilise un Zend_Controller_Router custom pour simuler une requête HTTP lors d’un appel par Drupal. 16
  • Solution : architecture technique Branchement de tests unitaires Drupal + Zend Front office Front office Drupal 77Cœur Drupal Cœur Back office Back office Frontend Frontend Drupal 77 Drupal 77 Drupal Drupal Modules Modules Modules Modules Communs Spécifiques Communs Spécifiques Base Drupal Base Drupal MySQL MySQL API REST Site mobile Site mobile ou client externe ou client externe Web Services spécifiques Web Services spécifiques Zend_Rest serveur Zend_Rest serveur Implémentation Implémentation Des Web Services Des Web Services Implémentation Implémentation de l’intégration de l’intégration Drupal 77 Drupal Zend Framework Zend Framework Zend_Db Zend_Db Queues Queues Intégration Intégration Crons Crons Client REST Client REST Les deux bases peuvent être sur le même serveur Base Métier Base Métier PostgreSQL PostgreSQL Spécifique projet Spécifique projet Zend Zend FTP ––Fichiers clients FTP Fichiers clients Serveur REST Serveur REST 17
  • Code : client Drupal 18
  • Code : serveur Zend 19
  • Solution 4 : include de Zend  Côté Drupal  Côté Zend – Une classe routeur qui ne fait rien – Un connecteur avec un Zend_Controller_Front 20
  • Solution 4 : include de Zend  Un callURL pour lancer l’application  Schéma d’utilisation concomitante du REST + include grâce à la surcouche de choix côté Drupal 21
  • Mix des solutions 3 et 4  Schéma d’utilisation Appel HTTP Appel HTTP Solution 4 : include Drupal 77 Drupal Classe d’appel Zend Classe d’appel Zend Drupal 77 Drupal Zend Zend Configuration Configuration Solution 3 : REST Drupal 77 Drupal Client Web Service Client Web Service Web Service Web Service Zend Zend Drupal 77 Drupal Spécifique projet Spécifique projet Zend Zend 22
  • Solution : découpage  Drupal 7 gère – Toutes les fonctionnalités front : maps, jQuery, graphiques, drag’n’drop, HTML5 – Tous les appels HTTP à des pages  Zend Framework – Tous les appels HTTP pour des données – Base de données métier – Serveur REST interne + client REST vers les ressources externes – API métier Mobile – Tests unitaires 23
  • Impact: REST en PHP  API en REST+JSON – Soap surtout utile avec des langages typés  pas en PHP – REST+JSON plus rapide pour la dé sérialisation – Mise en cache du résultat côté Drupal (cf. plus loin) – Souci réglé : contenu exact du message car Zend attendait un json= 24
  • Impact : application mobile / TV  Site par utilisation de templates – Echange de JSON sur navigateur HTML5 – Version mobile Drupal (template) [4] – Récupération des données de formulaire/frontend par Drupal, luimême appelle API Zend si besoin – Pas optimisé  25
  • Impact : application mobile / TV  Application mobile « standard » : – Développement natif (Android, Iphone, …) – Appels aux API Drupal (module Services) – Quid des données Zend ?  Application TV spécifique : – Seulement si pas de support HTML5 – Application spécifique au STB/firmware avec parsing JSON 26
  • Impact : application mobile / TV  Application mobile / TV « maligne » – – – – Développement Full JS/HTML5 Sencha Connecter Sencha + Phonegap  Zend Drupal Services comme fournisseur de données Réutilisation du même code JS/HTML pour les apps mobile et TV – Ce même code peut-être publié comme site HTML5 – ! CSS et sécurité Convergence vers une application unique Web / Mobile / Tablette / TV 27
  • Impact : Formulaires / Synchronisation  Formulaire Drupal – Récupération des valeurs (combos, ..) en cache Drupal – Saisie utilisateur – Appel API écriture Zend – Synchronisation des deux caches  Attention ! Il faut transformer les id et node pour s’y retrouver : garder trace de l’id Zend côté Drupal 28
  • Impact : les niveaux de cache  Beaucoup de niveaux utilisables – Cache MySQL – Zend_Cache – Cache Drupal – Cache serveur (Apache) – Load balancer, CDN ou équipement réseau.  Conseils – Synchroniser les caches Zend et Drupal – Temps de rétention croissants et configurables 29
  • Impact : ré utilisation  Partie Zend : zones spécifiques en rouge  En jaune, du code réutilisable, par exemple - Gestion d’erreur - Générateur de modèles et objets JSON/XML - Décodage des messages 30
  • Impact : transactions distribuées  PHP ne sait pas gérer les transactions distribuées ! – Pas prévu sous PDO : le 2PC (two phase commit) est non supporté – Empêche le rollback correct de ce type de code 31
  • Impact : transactions distribuées  Solutions ?  Aucune satisfaisante pour le moment  – Rollback manuel de chaque API en compensation de transaction [2] – LIXA [3] – Schéma de données avec des champs « actif » 0/1 32
  • Tour de table - Questions 33
  • Liens  [1] http://www.cestfait.ch/content/drupal-bridge-zend-yea  [2] http://en.wikipedia.org/wiki/Compensating_transactio  [3] http://sourceforge.net/apps/mediawiki/lixa/index.php?  [4] http://www.bluedrop.fr/ressources-drupal-etles-sites-version-mobile 34