SlideShare una empresa de Scribd logo
1 de 34
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

Más contenido relacionado

La actualidad más candente

2008-09-30 Administration automatisée avec Powershell
2008-09-30 Administration automatisée avec Powershell2008-09-30 Administration automatisée avec Powershell
2008-09-30 Administration automatisée avec PowershellPatrick Guimonet
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EEYassine Badri
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Alphorm.com Formation PowerShell : Niveau Avancé
Alphorm.com Formation PowerShell : Niveau AvancéAlphorm.com Formation PowerShell : Niveau Avancé
Alphorm.com Formation PowerShell : Niveau AvancéAlphorm
 
Vue d'ensemble des nouveautés de System Center 2012 R2
Vue d'ensemble des nouveautés de System Center 2012 R2Vue d'ensemble des nouveautés de System Center 2012 R2
Vue d'ensemble des nouveautés de System Center 2012 R2Microsoft Technet France
 
Alphorm.com Formation Informatica PowerCenter : Niveau Débutant
Alphorm.com Formation Informatica PowerCenter : Niveau DébutantAlphorm.com Formation Informatica PowerCenter : Niveau Débutant
Alphorm.com Formation Informatica PowerCenter : Niveau DébutantAlphorm
 
Alphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau PerfectionnementAlphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau PerfectionnementAlphorm
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentationYassine Badri
 
Alphorm.com Formation Docker (2/2) - Administration Avancée
Alphorm.com Formation Docker (2/2) - Administration Avancée Alphorm.com Formation Docker (2/2) - Administration Avancée
Alphorm.com Formation Docker (2/2) - Administration Avancée Alphorm
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 

La actualidad más candente (20)

2008-09-30 Administration automatisée avec Powershell
2008-09-30 Administration automatisée avec Powershell2008-09-30 Administration automatisée avec Powershell
2008-09-30 Administration automatisée avec Powershell
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 
Framework php « Codeignitor »
Framework php « Codeignitor » Framework php « Codeignitor »
Framework php « Codeignitor »
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Jsp
JspJsp
Jsp
 
Alphorm.com Formation PowerShell : Niveau Avancé
Alphorm.com Formation PowerShell : Niveau AvancéAlphorm.com Formation PowerShell : Niveau Avancé
Alphorm.com Formation PowerShell : Niveau Avancé
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
Vue d'ensemble des nouveautés de System Center 2012 R2
Vue d'ensemble des nouveautés de System Center 2012 R2Vue d'ensemble des nouveautés de System Center 2012 R2
Vue d'ensemble des nouveautés de System Center 2012 R2
 
Alphorm.com Formation Informatica PowerCenter : Niveau Débutant
Alphorm.com Formation Informatica PowerCenter : Niveau DébutantAlphorm.com Formation Informatica PowerCenter : Niveau Débutant
Alphorm.com Formation Informatica PowerCenter : Niveau Débutant
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Cours JSP
Cours JSPCours JSP
Cours JSP
 
Alphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau PerfectionnementAlphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau Perfectionnement
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentation
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Alphorm.com Formation Docker (2/2) - Administration Avancée
Alphorm.com Formation Docker (2/2) - Administration Avancée Alphorm.com Formation Docker (2/2) - Administration Avancée
Alphorm.com Formation Docker (2/2) - Administration Avancée
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 

Similar a Architecture PHP 3 tier avec Zend en backend de Drupal

Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)cornnery
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALYoussouph Barry
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Retour d'expérience sur DirectAccess, bonnes pratiques, dépannage
Retour d'expérience sur DirectAccess, bonnes pratiques, dépannageRetour d'expérience sur DirectAccess, bonnes pratiques, dépannage
Retour d'expérience sur DirectAccess, bonnes pratiques, dépannageMicrosoft Technet France
 
Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Christophe Villeneuve
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8Aurelien Navarre
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Active Directory : nouveautés Windows Server 2012
Active Directory : nouveautés Windows Server 2012Active Directory : nouveautés Windows Server 2012
Active Directory : nouveautés Windows Server 2012Microsoft Technet France
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informationsneuros
 
Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm
 
Introduction à Zend Framework 2
Introduction à Zend Framework 2Introduction à Zend Framework 2
Introduction à Zend Framework 2Mickael Perraud
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet DrupalAdyax
 
Afup 2015 zf3 le futur de php
Afup 2015   zf3 le futur de phpAfup 2015   zf3 le futur de php
Afup 2015 zf3 le futur de phpSophie Beaupuis
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASGuillaume Sauthier
 
Drupal en environnement microsoft
Drupal en environnement microsoftDrupal en environnement microsoft
Drupal en environnement microsoftLeTesteur
 

Similar a Architecture PHP 3 tier avec Zend en backend de Drupal (20)

Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPAL
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Retour d'expérience sur DirectAccess, bonnes pratiques, dépannage
Retour d'expérience sur DirectAccess, bonnes pratiques, dépannageRetour d'expérience sur DirectAccess, bonnes pratiques, dépannage
Retour d'expérience sur DirectAccess, bonnes pratiques, dépannage
 
Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?
 
Les framework mvc
Les framework mvcLes framework mvc
Les framework mvc
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Active Directory : nouveautés Windows Server 2012
Active Directory : nouveautés Windows Server 2012Active Directory : nouveautés Windows Server 2012
Active Directory : nouveautés Windows Server 2012
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
 
Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2
 
Introduction à Zend Framework 2
Introduction à Zend Framework 2Introduction à Zend Framework 2
Introduction à Zend Framework 2
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet Drupal
 
Afup 2015 zf3 le futur de php
Afup 2015   zf3 le futur de phpAfup 2015   zf3 le futur de php
Afup 2015 zf3 le futur de php
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
 
Drupal en environnement microsoft
Drupal en environnement microsoftDrupal en environnement microsoft
Drupal en environnement microsoft
 

Architecture PHP 3 tier avec Zend en backend de Drupal

  • 1. Architecture PHP 3 tier avec Zend en backend de Drupal PHPTOUR 29 novembre 2012 Thomas DELERM – tdelerm@sigma.fr
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. Code : client Drupal 18
  • 19. Code : serveur Zend 19
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. Tour de table - Questions 33
  • 34. 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