Cours WebServices
Cours - Documents à télécharger
Liens webservices
- Livres
- Adresse
- Iceland API gouv
- Photos
- Pays
- Pays 2
- Adresses
- WSDL La poste : spec_ws_suivi_en.pdf
Exercice 1 : Consommer des WebServices en PHP (Conversion de température Celsius -> fahrenheit) / Partie 1
- Client PHP
<?php // The weather // Chose your method, with or without user info $wsdl = 'http://www.w3schools.com/xml/tempconvert.asmx?WSDL'; // Make the connection $client = new SoapClient($wsdl); // Use this to see what services are available //var_dump($client->__getFunctions()); $listeFonctions = $client->__getFunctions(); //afficher foreach($listeFonctions as $k => $v) { echo $k."--".$v."\n" ; } // Actually call the service $result = $client->CelsiusToFahrenheit(array("Celsius"=>"25")); //var_dump($result); //afficher echo "les données\n" ; foreach($result as $k => $v) { echo $k."\n" ; print_r($v); } ?>
- Accéder à un objet PHP
stdClass Object ( [MorningLow] => [DaytimeHigh] => 83 ) $monOnject->MorningLow ;
- Python
from SOAPpy import WSDL import zeep client = zeep.Client('http://www.webservicex.net/ConvertSpeed.asmx?WSDL') result = client.service.ConvertSpeed( 102, 'kilometersPerhour', 'milesPerhour') print result
Exercice 2 : Consommer des WebServices en PHP / Java (Partie 2)
- Conversion de température fahrenheit → Celsius
- Réalisez le même exercice que précédemment en utilisant la fonction inverse pour convertir une température de fahrenheit → Celsius.
- Utilisez Eclipse pour vous connecter à ce webservice : http://www.webservicex.net/ConvertSpeed.asmx?WSDL
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("test"); try { TempConvertSoapProxy temp = new TempConvertSoapProxy(); System.out.println(temp.fahrenheitToCelsius("123")); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public class TestSpeed { public static void main(String[] args) { // TODO Auto-generated method stub ConvertSpeedsSoapProxy c = new ConvertSpeedsSoapProxy(); SpeedUnit s1 = new SpeedUnit(SpeedUnit._kilometersPerhour); SpeedUnit s2 = new SpeedUnit(SpeedUnit._milesPerhour); try { System.out.println(c.convertSpeed(102, s1, s2)); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Exercice 3 : Consommer des WebServices en PHP/Java
- client Java / PHP
- Lister les différentes fonctions
- Créer une mini application qui permet de :
- Lister les pays
- Lister les jours fériés par mois
- Indiquer la date pour chaque jours férié
Exercice 4 : Créer son WebService (Quel jour ?) en PHP (client PHP/Java)
- Créer le webservice “quel jour est il ?” en PHP (partie cliente et server)
- Le formulaire devra prendre en entrée une date et en sortie renvoyer le jour de la semaine
- Consommer le WS avec des clients PHP / Java / Python / Ruby
- Créez votre propre fichier wsdl avec eclipse
- Exemple serveur php
<?php // serv.php class MyService { public function add($x, $y) { return $x + $y; } public function multi($x, $y) { return $x * $y; } } //à adapter en fonction de votre configuration $options = array( 'uri' => 'http://localhost/LPRO/2016/serv.php', 'location' => 'http://localhost/LPRO/2016/serv.php', ); $server = new SOAPServer(null, $options); $server->setObject(new MyService()); $server->handle(); ?>
- Exemple client php
<?php // cli.php // à adapter en fonction de votre configuration $options = array( 'uri' => 'http://localhost/LPRO/2016/serv.php', 'location' => 'http://localhost/LPRO/2016/serv.php', ); $client = new SOAPClient(null, $options); echo $client->multi(10, 15); ?>
- WSDL : Client
<?php // Pour supprimer le cache du web-service ini_set('soap.wsdl_cache_enabled', 0); // Nouveau Client SOAP try { // Nouvelle instance de la classe soapClient $client = new SoapClient('http://127.0.0.1/lpro/ws1/Hello.wsdl', array('trace' => 1)); $parm = 'LPRO'; // Appel de la méthode hellotest du service web try{ $oReturn = $client->bonjour("LPRO"); } catch (Exception $e) { echo 'erreur1'.$e; } catch (SoapFault $fault) { echo "il y a une erreur"; trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } // affiche le résultat echo "Resultat : ".$oReturn."<br/>" ; } catch (SoapFault $fault) { echo 'erreur : '.$fault; } // Affichage des requetes et reponses SOAP (pour debug) echo '<br />Requete SOAP : '.htmlspecialchars($client->__getLastRequest()).'<br />'; echo '<br />Reponse SOAP : '.htmlspecialchars($client->__getLastResponse()).'<br />'; echo '<br/>'.var_dump($oReturn); ?>
- WSDL : server
<?php // Pour supprimer le cache du web-service ini_set('soap.wsdl_cache_enabled', 0); // Pour définir le temp maximal d'éxecution de notre web-service ini_set('default_socket_timeout', 180); // Nom de notre web-service class Server { // Le service QuelJour que l'on a définit dans notre format wsdl function bonjour($parm) { return "bonjour ".$parm ; } } // On tente d'instancier la classe soapServer // Si cela s'avère impossible, on affiche une erreur try { $server = new SoapServer('Hello.wsdl', array('trace' => 1,'encoding' => 'ISO-8859-1')); // On définit la classe qui va gérer les requêtes SOAP (pour nous c'est la class Server) $server->setclass('Server'); $server->setPersistence(SOAP_PERSISTENCE_REQUEST); } catch (Exception $e) { echo 'erreur'.$e; } /* * Gestion des requêtes */ // Si l'appel provient d'un Web-Service if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $server -> handle();} catch (Exception $e) { echo 'erreur'.$e; } } // Facultatif seulement pour montrer les fonctions disponibles par le web-service else { echo '<strong>This SOAP server can handle following functions : </strong>'; echo '<ul>'; foreach($server -> getFunctions() as $func) { echo '<li>' , $func , '</li>'; } echo '</ul>'; } ?>
Exercice 5 : Manipuler le format JSON (open data Nantes)
- Utilisez les URL ci-dessous et affichez les données :
- Créez un formulaire pour retrouver une adresse complète
- Créez une page album des dernières images flickr avec un formulaire de saisie:
<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?>
- Exemple Json
{ "response": { "version": "0.9" ,"termsofService": "http://www.actualitix.com" ,"features": { "date": "24/09/2013" } }, "cotation_bourse": [ { "bourse": { "heure": "15", "minute": "04" }, "total": { "compagnie": "Total", "cotation": "43,15", "tendance": "+ 1,04"}, "michelin": { "compagnie": "Michelin", "cotation": "82,42", "tendance": "+ 1,20"} }, { "bourse": { "heure": "09", "minute": "04" }, "yahoo": { "compagnie": "Yahoo", "cotation": "30,26", "tendance": "- 1,06"}, "google": { "compagnie": "Google", "cotation": "886,50", "tendance": "- 3,89"} } ] }
- Opendata Nantes
<?php //$json = file_get_contents("cotation_bourse.json"); $json = file_get_contents("http://data.nantes.fr/api/getDisponibiliteParkingsPublics/1.0/39W9VSNCSASEOGV/?output=json"); $p_json = json_decode($json); $test = $p_json->{'opendata'}->{'request'}; //var_dump($p_json->{'opendata'}->{'answer'}->{'data'}->{'Groupes_Parking'}->{'Groupe_Parking'}); foreach($p_json->{'opendata'}->{'answer'}->{'data'}->{'Groupes_Parking'}->{'Groupe_Parking'} as $k=>$v) { foreach($v as $k2=>$v2) { echo $k2."=>".$v2."<br/>" ; } echo "-------------------------</br>" ; } //var_dump(json_decode($json, true)); //print_r($parsed_json->{'opendata'}); //echo prettyPrint(prettyPrint($json)); //echo json_encode($json, JSON_PRETTY_PRINT); ?>
Manipuler le format XML (parsing simple)
$data = file_get_contents("http://?????.???"); $dom = new DomDocument(); //$dom->load('fichier.xml'); $dom->loadXML($data); $racine = $dom->documentElement; echo $racine->nodeName; $title=$dom->getElementsByTagName('title'); foreach($title as $v) { echo $v->firstChild->nodeValue."<br/>"; }
Exercice 6
- Recherchez un webservice permettant de lister les villes en fonction d'un code postal
Mots clés
- SOA, Architectures Orientés Services, REST
- SOAP, WSDL, UDDI
Liens
http://fr.wikipedia.org/wiki/Service_Web
http://fr.wikipedia.org/wiki/REST
http://fr.wikipedia.org/wiki/SOAP
http://fr.wikipedia.org/wiki/Architecture_orient%C3%A9e_services
http://fr.wikipedia.org/wiki/Web_Services_Description_Language
http://fr.wikipedia.org/wiki/JavaScript_Object_Notation
http://fr.wikipedia.org/wiki/Universal_Description_Discovery_and_Integration
http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_And_XML
http://www.flickr.com/services/feeds/
http://blog.visual.ly/data-sources/
http://eusebius.developpez.com/php5dom/
$values=simplexml_load_file("http://.....");
Consommer des webservices
- Exercices :
- Testez le webservice weather de yahoo
- Testez le webservice translate de google
utilisez les API XML et JSON de php pour afficher le résultat
Yahoo
- Search
- Search (JSON format)
<?php $json = file_get_contents("VOTRE URL REST", true); //getting the file content $decode = json_decode($json, true); //getting the file content as array echo "<pre>"; print_r($decode); echo "</pre>"; foreach($decode["items"] as $k=>$v) { echo utf8_decode($v["displayLink"])."<br/>" ; } ?>
Création de webservice
- Exercice1 : Créer un webservice en PHP et consommez ce webservice avec un client PHP et Ruby
- Exercice 2 : Créer ce même webservice “Restful”
- Exercice 3 : Créer un forumaire pour utiliser un moteur de recherche
- Exercice 4 : Formulaire interrogation XML API search de twitter
- Exercice 5 : Formulaire interrogation JSON API search de twitter
- Exercice 6 : Creer un WebService RESTful