SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Université IBM i 2018
16 et 17 mai
IBM Client Center Paris
S51 – Vos projets Web Services IBM i à l’aide de PHP
Gautier DUMAS
Notos
gdumas@notos.fr – 04 30 96 97 31
NoToS
 Expertise autour de l’IBM i
• Regard moderne
• Sécurité
• Service
– Formation, audit, développement…
 PHP sur IBM i avec Zend
• Modernisation
• Web Services…
 Développement de progiciels
• Modernisation à valeur ajoutée des IBM i
3
Plan de la présentation
 Les Web Services (WS)
• Généralités
• SOAP vs REST
• Les formats d’échanges XML et JSON
 PHP sur IBM i
• Pourquoi le PHP pour les WS ?
• Le Zend Server
• Intégration des web services dans l’existant IBM i
 Exemples concrets de WS en PHP
• Exposer un Web Service REST
• Exposer un Web Service SOAP
• Consommer un web service REST
• Consommer un web service SOAP
4
5
Les Web Services
Généralités sur les WS
 Un web service est un outil utilisé pour standardiser les échanges de
données entre deux interlocuteurs, potentiellement dans des
environnements hétérogènes.
 Il permet de faire communiquer deux machines au travers de TCP/IP en
milieu hétérogène, sans se soucier de l’OS hôte de la machine, ni du
langage de programmation utilisé.
Exemples :
- Une application Windows développée en C# pourra interroger un web service
sur IBM i développé en PHP.
- Un script PHP sur IBM i pourra interroger un web service écrit en JAVA sur un
serveur Linux.
…
 Il existe deux grandes familles (deux standards donc) de Web Service :
• SOAP
• REST
6
Bien démarrer son projet WS
 Pour bien démarrer son projet Web Service, il faut se poser les
questions suivantes :
• Allons nous consommer ou exposer des web services ? (ou les deux ?)
• Allons nous implémenter la norme REST ou la norme SOAP ?
• Quelle technologie allons nous utiliser pour développer ces web services ?
 Ces points seront développés dans cette session au travers de 4
exemples en PHP :
• Exposer un web service REST
• Exposer un web service SOAP
• Consommer un web service REST
• Consommer un web service SOAP
7
SOAP vs REST
 SOAP (initialement acronyme de Simple Object Access Protocol)
 Protocole orienté objet bâti sur la norme XML
 Il est composé de deux parties :
• Une enveloppe, contenant des information sur le message lui-même afin de
permettre son acheminement et son traitement
• Un modèle de données, définissant le format du message, c’est-à-dire les
informations à transmettre
 Initialement défini par Microsoft et IBM, mais est devenu une référence
depuis une recommandation du W3C, utilisée notamment le cadre
d’architecture de type SOA (Service Oriented Architecture).
 S’appuie sur les fichiers WSDL, qui font office de contrats de services. Ils
définissent précisément la nature des échanges entre les consommateurs et
les producteurs de web services. C’est un atout indéniable par rapport aux
services de type REST, plus simples à mettre en œuvre mais aussi moins
formalisés, moins cadrés. 8
SOAP vs REST
 REST (acronyme de Representational State Transfer)
 N’est pas un protocole (tel que HTTP), ni un format d’échange
 Il définit une architecture qui utilise le protocole HTTP et ses méthodes
associées pour implémenter les web services
 Les différents verbes HTTP seront utilisés pour différencier les méthodes à
appeler :
• GET (lecture), PUT (création), POST (modification), DELETE (suppression)
 Plus simple à mettre en œuvre (un simple script PHP derrière un serveur
web)
 Plus performant que SOAP avec la possibilité de choisir son format
d’échange
 Moins normé, et nécessitera donc une communication accrue entre le
producteur et le consommateur (ou l’écriture de documentations associées) 9
SOAP vs REST
 La norme SOAP sera utilisée lorsque :
• Besoin de règles strictes (cadrées)
• La performance n’est pas un axe majeur
• Le Web Service sera utilisé par un grand nombre de consommateurs
différents (il suffira de leur fournir l’url du WSDL)
 La norme REST sera utilisée lorsque :
• Le besoin de structuration est moins important
• Le besoin de performance est majeur
• Plus utilisé pour des constructions d’API autour d’objets
10
Les formats d’échanges
 Que l’on implémente un WS SOAP ou REST, la question du format
d’échange doit se poser
• En SOAP, le format XML est obligatoirement présent. Bien que nous
puissions utiliser des chaînes JSON, elles seront intégrées dans un
message global XML
• En REST, le choix du format est libre. Nous pouvons même choisir de ne pas
utiliser de format d’échanges…
 Le choix du format se fera en fonction :
• des connaissances des développeurs
Ont-ils déjà menés des projets XML ou JSON ?
• des besoins de performances
JSON pour le plus performant car moins lourd sur le réseau
• Des compétences des interlocuteurs
Maitrisent ils plutôt le XML ou le JSON ? 11
Les formats d’échanges
XML JSON
eXtensible Markup Language JavaScript Object Notation
Format d’échange utilisé depuis de
nombreuses années (EDI, Echanges
bancaires, SOAP etc…)
Format d’échange plus récent issu du
développement web (très utilisé avec les
web services REST)
Structure verbeuse Structure légère
Stockage dans un stream file (*STMF) ou
dans DB2 (zone XML ou CHAR)
Stockage dans un stream file (*STMF) ou
dans DB2 (zone CHAR)
Lecture et écriture de chaines XML en RPG
ou en PHP
Manipulation et écriture facilité en PHP à
l’aide de fonctions intégrées (json_encode et
json_decode)
12
Les formats d’échanges
 Exemple tableau : même jeu de données en XML et en JSON
13
14
PHP sur IBM i
avec le Zend Server
Pourquoi le PHP pour les WS ?
 PHP permet d’unifier la technologie et les compétences utilisées pour
tous les projets WS :
• De type REST ou SOAP
• Simples ou complexes (avec authentification, structure d’échanges
complexes …)
• Autant pour consommer qu’exposer des WS
• Permet de manipuler aussi bien le XML que le JSON au travers de fonctions
natives
 En natif IBM i, il faudra changer de technologies selon le projet ! (SQL, RPG,
serveur de web services intégré)
 Il est facilement accessible aux développeurs IBM i (notamment en
mettant de côté l’aspect interface graphique qui est inutile avec les WS)
 Il est complètement intégré depuis plusieurs années sur l’IBM i avec le
Zend Server
15
PHP sur IBM i avec le Zend Server
 Ecosystème PHP complètement intégré à l’IBM i
 Zend Server actuellement en version 9.1 (PHP 7.1)
• Un environnement conçu et testé pour la production avec :
– Les dernières versions stables de PHP
– Mise à disposition des mises à jour
– Un support dédié à la plateforme IBM i
 Zend Studio actuellement en version 13.6
• S’appuie sur noyau Eclipse (comme Rdi)
– Nombreux plugIns disponibles
– Interface moderne de développement
16
Le Zend Server
17
Monitoring
- Historique intelligent
des incidents
Configuration
avancée
Débogue
Z-Ray & Z-Ray Live !
Zend Debugger -
Logs
Performance
- Code tracing
- Accélérateur de PHP pour
IBM i
- Gestion du cache
Statistiques
• Intégration complète
• Interface graphique
• Interface 5250
• Professionnalisation des
applications PHP
• Accès
PHP sur IBM i : exposer des web services
 Lorsque le besoin sera d’exposer des web services, en PHP il sera
possible :
• D’interroger la base de données DB2 directement en SQL (connecteur
ibm_db2 en natif en PHP)
• De manipuler des fichiers de l’IFS (fabrications et envois de fichiers PDF,
Excel, Images etc…)
• Mais aussi d’appeler des programmes existants (RPG, CL, COBOL…) au
travers de procédures stockées ou du PHP Toolkit for IBM i
18
PHP sur IBM i : consommer des web services
 Lorsque le besoin sera de consommer un web service, le script PHP
pourra être appelé :
• Bien évidemment dans les applications web (lors du chargement d’une page,
au click sur un bouton, à la validation d’un formulaire…)
• Mais aussi directement dans les logiques métiers existantes (*PGM RPG,
CL…) à l’aide de l’API QP2SHELL qui permet d’appeler des scripts PHP en
ligne de commandes
• Cette technique est très utilisée pour intégrer des flux web services dans les
applications 5250
• Elle est également utilisée pour planifier l’exécution de clients web services
au travers du WRKJOBSCDE
19
20
Exemples concrets
en PHP :
Exposer un web service
Exposer un web service
 Objectif : rendre disponible une information ou une fonction pour une
autre application au sein de l’entreprise ou à l’extérieur (Intranet, Site
Web, un client, un fournisseur etc…)
 Se poser les bonnes questions :
• Qui va consommer le web service ?
• Combien de méthodes sont à exposer ?
• A quelle fréquence ?
• Quels seront les volumes de données échangés ?
 Les réponses à ces questions permettront de faire un choix approprié
entre SOAP et REST
21
Exposer un web service (REST) 1
 Une fois l’environnement web PHP installé (PHP/APACHE avec le Zend
Server), aucun autre prérequis n’est nécessaire pour développer son
web service REST
 En PHP, il faudra commencer par récupérer le verbe HTTP envoyé pour
connaitre la méthode à appeler :
22
// Bloc de code pour identifier le verbe HTTP utilisé par le client
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST') {
if (array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) {
if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') {
$method = 'DELETE';
} else
if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') {
$method = 'PUT';
} else {
throw new Exception("Unexpected Header");
}
} else {
$method = 'POST' ;
}
}
Exposer un web service (REST) 2
 Puis en fonction de la méthode, nous appellerons des fonctions
différentes
23
switch ($method) {
case 'PUT':{
echo 'update => ';
parse_str(file_get_contents('php://input'),$datas);
print_r($datas);
break ;
}
case 'DELETE':{
echo 'delete => ';
parse_str(file_get_contents('php://input'),$datas);
print_r($datas);
break ;
}
case 'POST':{
echo 'insert => ';
print_r($_POST);
break ;
}
case 'GET':{
echo 'select => ';
print_r($_GET);
break;
}
default:
die('Invalid Method '. 405);
break;
}
Exposer un web service (REST) 3
case 'GET':{
//Méthode implémentée pour la démonstration
include './config.inc.php';
$cnx = db2_connect(HOST, USR, PWD);
//Initialisation des paramètres
$codeArticle= $_GET['codeArticle'];//'1002';
$QTTE = 0;
$cpro = db2_prepare($cnx,"CALL IBM2016.STOCKP( ? , ? ) ");
db2_bind_param($cpro, 1, 'codeArticle', DB2_PARAM_IN);
db2_bind_param($cpro, 2, 'QTTE', DB2_PARAM_OUT);
if (db2_execute($cpro)) {
$tabRetour = array(
"CODEART"=>$codeArticle,
"QTE"=>$QTTE
);
echo json_encode($tabRetour);
}else {
echo db2_stmt_errormsg();
}
break;
}
24
Exposer un web service (SOAP)
 Nécessite l’utilisation de l’extension PHP soap disponible en standard
dans le Zend Server sans installation supplémentaire
 La première étape pour développer un WS SOAP est la construction du
fichier WSDL qui va décrire les méthodes à appeler pour le
consommateur
 Cette étape très importante, peut se faire de plusieurs façons :
• A la main avec un bon éditeur (Zend Studio) : nécessite la connaissance
complète de la syntaxe WSDL
• A l’aide de la classe PHP nusoap qui permet en quelques lignes de code
PHP, de nous générer le WSDL
25
Génération du WSDL avec nusoap
26
<?php
// Inclusion de la classe
require './nusoap/lib/nusoap.php';
// Création d'un nouveau serveur SOAP
$serv = new nusoap_server();
// Configuration du WSDL
$serv->configureWSDL("IBM2018", "urn:IBM2018/",
"http://IP_IBMi/IBM2018/WSServerSOAP.php");
// Définition du namespace
$serv->wsdl->schemaTargetNamespace = "http://IP_IBMi/IBM2018/";
Génération du wsdl avec nusoap
27
// Enregistrement dans le serveur SOAP de la fonction PHP GetQtyInStock
// et définition de ses paramètres E/S
$serv->register("GetQtyInStock",
array(
"Code_Article" => "xsd:string"
),
array(
"QtyInStock" => "xsd:int"
),
'urn:GetQtyInStock2',
'urn:IBM2018/GetQtyInStock',
'', '', 'Retourne la qte en stock pour un article'
);
// Récupère la requête SOAP entrante
$POST_DATA = file_get_contents("php://input");
// Analyse le XML, exécute la (ou les) fonction(s), et renvoie la réponse au format XML
$serv->service($POST_DATA);
Exposer un web service (SOAP)
 Une fois le WSDL créé, nous pouvons commencer à développer les
méthodes qui iront, en fonction du besoin, lire/écrire dans DB2.
 Ces méthodes devront respecter les paramètres d’Entrée/Sortie qui
auront été déclaré dans le WSDL (bien respecter le nombre et le type
des paramètres échangés).
28
Ecriture de la méthode
29
function GetQtyInStock($codeArticle){
include 'config.inc.php';
$cnx = db2_connect(HOST, USR, PWD);
//Initialisation des paramètres
$codeArticle= $codeArticle;//'1002';
$QTTE = 0;
$cpro = db2_prepare($cnx,"CALL IBM2016.STOCKP( ? , ? ) ");
db2_bind_param($cpro, 1, 'codeArticle', DB2_PARAM_IN);
db2_bind_param($cpro, 2, 'QTTE', DB2_PARAM_OUT);
if (db2_execute($cpro)) {
return $QTTE;
}else {
return db2_stmt_errormsg();
}
}
Sécurisez vos web services
 Le besoin de sécurisation peut varier en fonction de la nature des
données échangées, et de la localisation du consommateur (sur internet
? Sur le réseau local ?)
 Sécurisation possible à différents niveaux :
• Au niveau de l’instance web APACHE par SSL afin :
– de crypter les informations qui vont transiter entre le client et le serveur WS
– d’assurer votre identité au consommateur
• Au niveau du script PHP en demandant une authentification (par exemple
par utilisateur / mot de passe)
Au choix et en fonction du projet, la vérification pourra se faire par rapport à un USRPRF de l’IBM i,
un compte du domaine (par connexion LDAP) ou tout autre solution (base de données utilisateurs,
fichier .txt, autre sgbd etc…)
• Au niveau réseau avec la configuration du firewall de l’entreprise
Exemple : Autorisations par IP
• …
30
31
Exemples concrets
en PHP :
Consommer un web service
Consommer un web service (REST)
 Pour consommer un web service REST simple, nous pouvons utiliser la
fonction PHP file_get_contents
/*
* METHODE 1 : avec file_get_contents
*/
$reponse =
file_get_contents("http://192.168.1.3/IBM/Universite2018/WSServerREST
.php?codeArticle=1002");
echo "<h1>Résultat JSON avec file_get_contents pour l'article
1002</h1>";
echo $reponse."</br>";
32
Consommer un web service (REST)
 Pour consommer des WS REST plus complexes (authentification,
passage de paramètres autre que GET, …), il est préférable d’utiliser
CURL. CURL est livrée en standard avec le Zend Server sous forme
d’extension.
 Les fonctionnalités de CURL peuvent donc être appelées directement en
PHP sans installation supplémentaire
 Plus d’infos sur CURL en PHP sur :
http://php.net/manual/fr/ref.curl.php
33
Consommer un web service (REST)
/*
* METHODE 2 : avec CURL
*/
$url =
"http://192.168.1.3/IBM/Universite2018/WSServerREST.php?codeAr
ticle=1003";
$client = curl_init($url);
curl_setopt($client, CURLOPT_RETURNTRANSFER, 1);
$reponse = curl_exec($client);
curl_close($client);
echo "<h1>Résultat JSON avec CURL pour l'article 1003</h1>";
echo $reponse."</br>"; 34
Consommer un web service (SOAP)
 Nécessite l’utilisation de l’extension PHP soap disponible en standard
dans le Zend Server sans installation supplémentaire
35
Consommer un web service (SOAP)
36
//Connexion au WSDL
$client = new
SoapClient("http://192.168.1.3/IBM/Universite2018/WSServerSOAP.php?wsdl");
//Affichage des fonctions publiées
echo "<h1>Liste des fonctions publiées dans le WSDL</h1>";
var_dump($client->__getFunctions());
//Appel de la méthode SOAP GetQtyInStock
$reponse = $client-
>__soapCall("GetQtyInStock",array("Code_Article"=>"1002"));
//Affichage du résultat de l'appel
echo "<h1>Résultat avec SoapClient pour l'article 1002</h1>";
echo $reponse."</br>";
Merci de votre attention
Pour plus d’informations
gdumas@notos.fr

Contenu connexe

Tendances

Services web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiServices web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiEl Habib NFAOUI
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlinangeeLee
 
Digital race evolution programmation web 1.0
Digital race   evolution programmation web 1.0Digital race   evolution programmation web 1.0
Digital race evolution programmation web 1.0Sequoia-ID
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_servicesCamus LANMADOUCELO
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture WebAdyax
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
RESTful API - Retour d'expérience
RESTful API - Retour d'expérienceRESTful API - Retour d'expérience
RESTful API - Retour d'expérienceChristophe Laprun
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Presentation
PresentationPresentation
Presentationbois
 
Présentation Exchange 2010
Présentation Exchange 2010Présentation Exchange 2010
Présentation Exchange 2010Majid CHADAD
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOALilia Sfaxi
 
Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatialesLes apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatialesGaëtan LAVENU
 
Tp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPELTp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPELLilia Sfaxi
 
Rapport MS Exchange 2010
Rapport MS Exchange 2010Rapport MS Exchange 2010
Rapport MS Exchange 2010Majid CHADAD
 
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Ouadie LAHDIOUI
 

Tendances (20)

Services web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiServices web soap-el-habib-nfaoui
Services web soap-el-habib-nfaoui
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlin
 
Ter Web Service Intro
Ter Web Service IntroTer Web Service Intro
Ter Web Service Intro
 
Digital race evolution programmation web 1.0
Digital race   evolution programmation web 1.0Digital race   evolution programmation web 1.0
Digital race evolution programmation web 1.0
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture Web
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
7 rest
7 rest7 rest
7 rest
 
RESTful API - Retour d'expérience
RESTful API - Retour d'expérienceRESTful API - Retour d'expérience
RESTful API - Retour d'expérience
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
 
Presentation
PresentationPresentation
Presentation
 
.NET DotNet CF - 3
.NET DotNet CF - 3.NET DotNet CF - 3
.NET DotNet CF - 3
 
serveur web
serveur webserveur web
serveur web
 
Présentation Exchange 2010
Présentation Exchange 2010Présentation Exchange 2010
Présentation Exchange 2010
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOA
 
Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatialesLes apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
 
Tp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPELTp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPEL
 
Rapport MS Exchange 2010
Rapport MS Exchange 2010Rapport MS Exchange 2010
Rapport MS Exchange 2010
 
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
 

Similaire à S51 vos projets web services ibm i a l aide de php

Chap1 p1-introduction
Chap1 p1-introductionChap1 p1-introduction
Chap1 p1-introductionMoez Re
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
Architectures orientées services
Architectures orientées servicesArchitectures orientées services
Architectures orientées servicesDonia Hammami
 
Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'artTugdual Grall
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxHamzaElgari
 
JEE_chapitre 1.pdf
JEE_chapitre 1.pdfJEE_chapitre 1.pdf
JEE_chapitre 1.pdfiyadamri
 
Introduction au développement Web
Introduction au développement Web Introduction au développement Web
Introduction au développement Web Romain Willmann
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureNicolas Georgeault
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EEYassine Badri
 

Similaire à S51 vos projets web services ibm i a l aide de php (20)

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
 
43_pps.pdf
43_pps.pdf43_pps.pdf
43_pps.pdf
 
Chap1 p1-introduction
Chap1 p1-introductionChap1 p1-introduction
Chap1 p1-introduction
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Architectures orientées services
Architectures orientées servicesArchitectures orientées services
Architectures orientées services
 
Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptx
 
JEE_chapitre 1.pdf
JEE_chapitre 1.pdfJEE_chapitre 1.pdf
JEE_chapitre 1.pdf
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
Introduction au développement Web
Introduction au développement Web Introduction au développement Web
Introduction au développement Web
 
Do you speak technique ?
Do you speak technique ?Do you speak technique ?
Do you speak technique ?
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Soap
SoapSoap
Soap
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
Web Services
Web ServicesWeb Services
Web Services
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 

Plus de Gautier DUMAS

S35 developper en node.js versus php
S35   developper en node.js versus phpS35   developper en node.js versus php
S35 developper en node.js versus phpGautier DUMAS
 
S18 db2 web query comment partir de zero
S18   db2 web query comment partir de zeroS18   db2 web query comment partir de zero
S18 db2 web query comment partir de zeroGautier DUMAS
 
S55 db2 web query pour les administrateurs ibm i
S55   db2 web query pour les administrateurs ibm iS55   db2 web query pour les administrateurs ibm i
S55 db2 web query pour les administrateurs ibm iGautier DUMAS
 
S17 adressez vos besoins complexes de reporting avec db2 web query
S17   adressez vos besoins complexes de reporting avec db2 web queryS17   adressez vos besoins complexes de reporting avec db2 web query
S17 adressez vos besoins complexes de reporting avec db2 web queryGautier DUMAS
 
S43 passer à php 7 sous IBM i
S43   passer à php 7 sous IBM iS43   passer à php 7 sous IBM i
S43 passer à php 7 sous IBM iGautier DUMAS
 
S29 valorisation de l'existant ibm i avec php
S29   valorisation de l'existant ibm i avec phpS29   valorisation de l'existant ibm i avec php
S29 valorisation de l'existant ibm i avec phpGautier DUMAS
 
S28 db2 web query - analytique et mobilité
S28   db2 web query - analytique et mobilitéS28   db2 web query - analytique et mobilité
S28 db2 web query - analytique et mobilitéGautier DUMAS
 
S21 les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...
S21   les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...S21   les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...
S21 les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...Gautier DUMAS
 

Plus de Gautier DUMAS (8)

S35 developper en node.js versus php
S35   developper en node.js versus phpS35   developper en node.js versus php
S35 developper en node.js versus php
 
S18 db2 web query comment partir de zero
S18   db2 web query comment partir de zeroS18   db2 web query comment partir de zero
S18 db2 web query comment partir de zero
 
S55 db2 web query pour les administrateurs ibm i
S55   db2 web query pour les administrateurs ibm iS55   db2 web query pour les administrateurs ibm i
S55 db2 web query pour les administrateurs ibm i
 
S17 adressez vos besoins complexes de reporting avec db2 web query
S17   adressez vos besoins complexes de reporting avec db2 web queryS17   adressez vos besoins complexes de reporting avec db2 web query
S17 adressez vos besoins complexes de reporting avec db2 web query
 
S43 passer à php 7 sous IBM i
S43   passer à php 7 sous IBM iS43   passer à php 7 sous IBM i
S43 passer à php 7 sous IBM i
 
S29 valorisation de l'existant ibm i avec php
S29   valorisation de l'existant ibm i avec phpS29   valorisation de l'existant ibm i avec php
S29 valorisation de l'existant ibm i avec php
 
S28 db2 web query - analytique et mobilité
S28   db2 web query - analytique et mobilitéS28   db2 web query - analytique et mobilité
S28 db2 web query - analytique et mobilité
 
S21 les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...
S21   les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...S21   les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...
S21 les dernières nouveautés php sous ibm i (zend server 8.5 et zend studio...
 

S51 vos projets web services ibm i a l aide de php

  • 1. Université IBM i 2018 16 et 17 mai IBM Client Center Paris S51 – Vos projets Web Services IBM i à l’aide de PHP Gautier DUMAS Notos gdumas@notos.fr – 04 30 96 97 31
  • 2. NoToS  Expertise autour de l’IBM i • Regard moderne • Sécurité • Service – Formation, audit, développement…  PHP sur IBM i avec Zend • Modernisation • Web Services…  Développement de progiciels • Modernisation à valeur ajoutée des IBM i 3
  • 3. Plan de la présentation  Les Web Services (WS) • Généralités • SOAP vs REST • Les formats d’échanges XML et JSON  PHP sur IBM i • Pourquoi le PHP pour les WS ? • Le Zend Server • Intégration des web services dans l’existant IBM i  Exemples concrets de WS en PHP • Exposer un Web Service REST • Exposer un Web Service SOAP • Consommer un web service REST • Consommer un web service SOAP 4
  • 5. Généralités sur les WS  Un web service est un outil utilisé pour standardiser les échanges de données entre deux interlocuteurs, potentiellement dans des environnements hétérogènes.  Il permet de faire communiquer deux machines au travers de TCP/IP en milieu hétérogène, sans se soucier de l’OS hôte de la machine, ni du langage de programmation utilisé. Exemples : - Une application Windows développée en C# pourra interroger un web service sur IBM i développé en PHP. - Un script PHP sur IBM i pourra interroger un web service écrit en JAVA sur un serveur Linux. …  Il existe deux grandes familles (deux standards donc) de Web Service : • SOAP • REST 6
  • 6. Bien démarrer son projet WS  Pour bien démarrer son projet Web Service, il faut se poser les questions suivantes : • Allons nous consommer ou exposer des web services ? (ou les deux ?) • Allons nous implémenter la norme REST ou la norme SOAP ? • Quelle technologie allons nous utiliser pour développer ces web services ?  Ces points seront développés dans cette session au travers de 4 exemples en PHP : • Exposer un web service REST • Exposer un web service SOAP • Consommer un web service REST • Consommer un web service SOAP 7
  • 7. SOAP vs REST  SOAP (initialement acronyme de Simple Object Access Protocol)  Protocole orienté objet bâti sur la norme XML  Il est composé de deux parties : • Une enveloppe, contenant des information sur le message lui-même afin de permettre son acheminement et son traitement • Un modèle de données, définissant le format du message, c’est-à-dire les informations à transmettre  Initialement défini par Microsoft et IBM, mais est devenu une référence depuis une recommandation du W3C, utilisée notamment le cadre d’architecture de type SOA (Service Oriented Architecture).  S’appuie sur les fichiers WSDL, qui font office de contrats de services. Ils définissent précisément la nature des échanges entre les consommateurs et les producteurs de web services. C’est un atout indéniable par rapport aux services de type REST, plus simples à mettre en œuvre mais aussi moins formalisés, moins cadrés. 8
  • 8. SOAP vs REST  REST (acronyme de Representational State Transfer)  N’est pas un protocole (tel que HTTP), ni un format d’échange  Il définit une architecture qui utilise le protocole HTTP et ses méthodes associées pour implémenter les web services  Les différents verbes HTTP seront utilisés pour différencier les méthodes à appeler : • GET (lecture), PUT (création), POST (modification), DELETE (suppression)  Plus simple à mettre en œuvre (un simple script PHP derrière un serveur web)  Plus performant que SOAP avec la possibilité de choisir son format d’échange  Moins normé, et nécessitera donc une communication accrue entre le producteur et le consommateur (ou l’écriture de documentations associées) 9
  • 9. SOAP vs REST  La norme SOAP sera utilisée lorsque : • Besoin de règles strictes (cadrées) • La performance n’est pas un axe majeur • Le Web Service sera utilisé par un grand nombre de consommateurs différents (il suffira de leur fournir l’url du WSDL)  La norme REST sera utilisée lorsque : • Le besoin de structuration est moins important • Le besoin de performance est majeur • Plus utilisé pour des constructions d’API autour d’objets 10
  • 10. Les formats d’échanges  Que l’on implémente un WS SOAP ou REST, la question du format d’échange doit se poser • En SOAP, le format XML est obligatoirement présent. Bien que nous puissions utiliser des chaînes JSON, elles seront intégrées dans un message global XML • En REST, le choix du format est libre. Nous pouvons même choisir de ne pas utiliser de format d’échanges…  Le choix du format se fera en fonction : • des connaissances des développeurs Ont-ils déjà menés des projets XML ou JSON ? • des besoins de performances JSON pour le plus performant car moins lourd sur le réseau • Des compétences des interlocuteurs Maitrisent ils plutôt le XML ou le JSON ? 11
  • 11. Les formats d’échanges XML JSON eXtensible Markup Language JavaScript Object Notation Format d’échange utilisé depuis de nombreuses années (EDI, Echanges bancaires, SOAP etc…) Format d’échange plus récent issu du développement web (très utilisé avec les web services REST) Structure verbeuse Structure légère Stockage dans un stream file (*STMF) ou dans DB2 (zone XML ou CHAR) Stockage dans un stream file (*STMF) ou dans DB2 (zone CHAR) Lecture et écriture de chaines XML en RPG ou en PHP Manipulation et écriture facilité en PHP à l’aide de fonctions intégrées (json_encode et json_decode) 12
  • 12. Les formats d’échanges  Exemple tableau : même jeu de données en XML et en JSON 13
  • 13. 14 PHP sur IBM i avec le Zend Server
  • 14. Pourquoi le PHP pour les WS ?  PHP permet d’unifier la technologie et les compétences utilisées pour tous les projets WS : • De type REST ou SOAP • Simples ou complexes (avec authentification, structure d’échanges complexes …) • Autant pour consommer qu’exposer des WS • Permet de manipuler aussi bien le XML que le JSON au travers de fonctions natives  En natif IBM i, il faudra changer de technologies selon le projet ! (SQL, RPG, serveur de web services intégré)  Il est facilement accessible aux développeurs IBM i (notamment en mettant de côté l’aspect interface graphique qui est inutile avec les WS)  Il est complètement intégré depuis plusieurs années sur l’IBM i avec le Zend Server 15
  • 15. PHP sur IBM i avec le Zend Server  Ecosystème PHP complètement intégré à l’IBM i  Zend Server actuellement en version 9.1 (PHP 7.1) • Un environnement conçu et testé pour la production avec : – Les dernières versions stables de PHP – Mise à disposition des mises à jour – Un support dédié à la plateforme IBM i  Zend Studio actuellement en version 13.6 • S’appuie sur noyau Eclipse (comme Rdi) – Nombreux plugIns disponibles – Interface moderne de développement 16
  • 16. Le Zend Server 17 Monitoring - Historique intelligent des incidents Configuration avancée Débogue Z-Ray & Z-Ray Live ! Zend Debugger - Logs Performance - Code tracing - Accélérateur de PHP pour IBM i - Gestion du cache Statistiques • Intégration complète • Interface graphique • Interface 5250 • Professionnalisation des applications PHP • Accès
  • 17. PHP sur IBM i : exposer des web services  Lorsque le besoin sera d’exposer des web services, en PHP il sera possible : • D’interroger la base de données DB2 directement en SQL (connecteur ibm_db2 en natif en PHP) • De manipuler des fichiers de l’IFS (fabrications et envois de fichiers PDF, Excel, Images etc…) • Mais aussi d’appeler des programmes existants (RPG, CL, COBOL…) au travers de procédures stockées ou du PHP Toolkit for IBM i 18
  • 18. PHP sur IBM i : consommer des web services  Lorsque le besoin sera de consommer un web service, le script PHP pourra être appelé : • Bien évidemment dans les applications web (lors du chargement d’une page, au click sur un bouton, à la validation d’un formulaire…) • Mais aussi directement dans les logiques métiers existantes (*PGM RPG, CL…) à l’aide de l’API QP2SHELL qui permet d’appeler des scripts PHP en ligne de commandes • Cette technique est très utilisée pour intégrer des flux web services dans les applications 5250 • Elle est également utilisée pour planifier l’exécution de clients web services au travers du WRKJOBSCDE 19
  • 19. 20 Exemples concrets en PHP : Exposer un web service
  • 20. Exposer un web service  Objectif : rendre disponible une information ou une fonction pour une autre application au sein de l’entreprise ou à l’extérieur (Intranet, Site Web, un client, un fournisseur etc…)  Se poser les bonnes questions : • Qui va consommer le web service ? • Combien de méthodes sont à exposer ? • A quelle fréquence ? • Quels seront les volumes de données échangés ?  Les réponses à ces questions permettront de faire un choix approprié entre SOAP et REST 21
  • 21. Exposer un web service (REST) 1  Une fois l’environnement web PHP installé (PHP/APACHE avec le Zend Server), aucun autre prérequis n’est nécessaire pour développer son web service REST  En PHP, il faudra commencer par récupérer le verbe HTTP envoyé pour connaitre la méthode à appeler : 22 // Bloc de code pour identifier le verbe HTTP utilisé par le client $method = $_SERVER['REQUEST_METHOD']; if ($method == 'POST') { if (array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) { if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') { $method = 'DELETE'; } else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') { $method = 'PUT'; } else { throw new Exception("Unexpected Header"); } } else { $method = 'POST' ; } }
  • 22. Exposer un web service (REST) 2  Puis en fonction de la méthode, nous appellerons des fonctions différentes 23 switch ($method) { case 'PUT':{ echo 'update => '; parse_str(file_get_contents('php://input'),$datas); print_r($datas); break ; } case 'DELETE':{ echo 'delete => '; parse_str(file_get_contents('php://input'),$datas); print_r($datas); break ; } case 'POST':{ echo 'insert => '; print_r($_POST); break ; } case 'GET':{ echo 'select => '; print_r($_GET); break; } default: die('Invalid Method '. 405); break; }
  • 23. Exposer un web service (REST) 3 case 'GET':{ //Méthode implémentée pour la démonstration include './config.inc.php'; $cnx = db2_connect(HOST, USR, PWD); //Initialisation des paramètres $codeArticle= $_GET['codeArticle'];//'1002'; $QTTE = 0; $cpro = db2_prepare($cnx,"CALL IBM2016.STOCKP( ? , ? ) "); db2_bind_param($cpro, 1, 'codeArticle', DB2_PARAM_IN); db2_bind_param($cpro, 2, 'QTTE', DB2_PARAM_OUT); if (db2_execute($cpro)) { $tabRetour = array( "CODEART"=>$codeArticle, "QTE"=>$QTTE ); echo json_encode($tabRetour); }else { echo db2_stmt_errormsg(); } break; } 24
  • 24. Exposer un web service (SOAP)  Nécessite l’utilisation de l’extension PHP soap disponible en standard dans le Zend Server sans installation supplémentaire  La première étape pour développer un WS SOAP est la construction du fichier WSDL qui va décrire les méthodes à appeler pour le consommateur  Cette étape très importante, peut se faire de plusieurs façons : • A la main avec un bon éditeur (Zend Studio) : nécessite la connaissance complète de la syntaxe WSDL • A l’aide de la classe PHP nusoap qui permet en quelques lignes de code PHP, de nous générer le WSDL 25
  • 25. Génération du WSDL avec nusoap 26 <?php // Inclusion de la classe require './nusoap/lib/nusoap.php'; // Création d'un nouveau serveur SOAP $serv = new nusoap_server(); // Configuration du WSDL $serv->configureWSDL("IBM2018", "urn:IBM2018/", "http://IP_IBMi/IBM2018/WSServerSOAP.php"); // Définition du namespace $serv->wsdl->schemaTargetNamespace = "http://IP_IBMi/IBM2018/";
  • 26. Génération du wsdl avec nusoap 27 // Enregistrement dans le serveur SOAP de la fonction PHP GetQtyInStock // et définition de ses paramètres E/S $serv->register("GetQtyInStock", array( "Code_Article" => "xsd:string" ), array( "QtyInStock" => "xsd:int" ), 'urn:GetQtyInStock2', 'urn:IBM2018/GetQtyInStock', '', '', 'Retourne la qte en stock pour un article' ); // Récupère la requête SOAP entrante $POST_DATA = file_get_contents("php://input"); // Analyse le XML, exécute la (ou les) fonction(s), et renvoie la réponse au format XML $serv->service($POST_DATA);
  • 27. Exposer un web service (SOAP)  Une fois le WSDL créé, nous pouvons commencer à développer les méthodes qui iront, en fonction du besoin, lire/écrire dans DB2.  Ces méthodes devront respecter les paramètres d’Entrée/Sortie qui auront été déclaré dans le WSDL (bien respecter le nombre et le type des paramètres échangés). 28
  • 28. Ecriture de la méthode 29 function GetQtyInStock($codeArticle){ include 'config.inc.php'; $cnx = db2_connect(HOST, USR, PWD); //Initialisation des paramètres $codeArticle= $codeArticle;//'1002'; $QTTE = 0; $cpro = db2_prepare($cnx,"CALL IBM2016.STOCKP( ? , ? ) "); db2_bind_param($cpro, 1, 'codeArticle', DB2_PARAM_IN); db2_bind_param($cpro, 2, 'QTTE', DB2_PARAM_OUT); if (db2_execute($cpro)) { return $QTTE; }else { return db2_stmt_errormsg(); } }
  • 29. Sécurisez vos web services  Le besoin de sécurisation peut varier en fonction de la nature des données échangées, et de la localisation du consommateur (sur internet ? Sur le réseau local ?)  Sécurisation possible à différents niveaux : • Au niveau de l’instance web APACHE par SSL afin : – de crypter les informations qui vont transiter entre le client et le serveur WS – d’assurer votre identité au consommateur • Au niveau du script PHP en demandant une authentification (par exemple par utilisateur / mot de passe) Au choix et en fonction du projet, la vérification pourra se faire par rapport à un USRPRF de l’IBM i, un compte du domaine (par connexion LDAP) ou tout autre solution (base de données utilisateurs, fichier .txt, autre sgbd etc…) • Au niveau réseau avec la configuration du firewall de l’entreprise Exemple : Autorisations par IP • … 30
  • 30. 31 Exemples concrets en PHP : Consommer un web service
  • 31. Consommer un web service (REST)  Pour consommer un web service REST simple, nous pouvons utiliser la fonction PHP file_get_contents /* * METHODE 1 : avec file_get_contents */ $reponse = file_get_contents("http://192.168.1.3/IBM/Universite2018/WSServerREST .php?codeArticle=1002"); echo "<h1>Résultat JSON avec file_get_contents pour l'article 1002</h1>"; echo $reponse."</br>"; 32
  • 32. Consommer un web service (REST)  Pour consommer des WS REST plus complexes (authentification, passage de paramètres autre que GET, …), il est préférable d’utiliser CURL. CURL est livrée en standard avec le Zend Server sous forme d’extension.  Les fonctionnalités de CURL peuvent donc être appelées directement en PHP sans installation supplémentaire  Plus d’infos sur CURL en PHP sur : http://php.net/manual/fr/ref.curl.php 33
  • 33. Consommer un web service (REST) /* * METHODE 2 : avec CURL */ $url = "http://192.168.1.3/IBM/Universite2018/WSServerREST.php?codeAr ticle=1003"; $client = curl_init($url); curl_setopt($client, CURLOPT_RETURNTRANSFER, 1); $reponse = curl_exec($client); curl_close($client); echo "<h1>Résultat JSON avec CURL pour l'article 1003</h1>"; echo $reponse."</br>"; 34
  • 34. Consommer un web service (SOAP)  Nécessite l’utilisation de l’extension PHP soap disponible en standard dans le Zend Server sans installation supplémentaire 35
  • 35. Consommer un web service (SOAP) 36 //Connexion au WSDL $client = new SoapClient("http://192.168.1.3/IBM/Universite2018/WSServerSOAP.php?wsdl"); //Affichage des fonctions publiées echo "<h1>Liste des fonctions publiées dans le WSDL</h1>"; var_dump($client->__getFunctions()); //Appel de la méthode SOAP GetQtyInStock $reponse = $client- >__soapCall("GetQtyInStock",array("Code_Article"=>"1002")); //Affichage du résultat de l'appel echo "<h1>Résultat avec SoapClient pour l'article 1002</h1>"; echo $reponse."</br>";
  • 36. Merci de votre attention Pour plus d’informations gdumas@notos.fr