{{ :lpro:soap.png?nolink&100 |}} {{ :lpro:webservice-soap.jpg.png?nolink&100 |}}
====== Cours WebServices ====== ===== Cours - Documents à télécharger ===== {{:lpro:cours-ws.odp|Cours WebServices}} {{:lpro:ws2.zip| Exemples}} {{:lpro:rest.pdf| Cours REST}} {{:lpro:restws.pdf| WebServices REST}} {{:lpro:restfulwebservices.pdf| Restful webservices}} {{:lpro:05-rest.pdf| Introduction REST}} ==== Liens webservices ==== * http://litis.univ-lehavre.fr/wiki/lpro/ws/rest * Livres * https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699 * Adresse * https://maps.googleapis.com/maps/api/geocode/json?address=universite%20du%20havre,%20france&sensor=false * Iceland API gouv * http://docs.apis.is/ * Photos * https://www.flickr.com/services/feeds/docs/photos_public/ * Pays * https://restcountries.eu * Pays 2 * https://geo.api.gouv.fr/communes?codePostal=76600&fields=nom,code,codesPostaux,codeDepartement,codeRegion,population&format=json&geometry=centre' * Adresses * https://adresse.data.gouv.fr/api/ * http://blog.programmableweb.com/2012/01/11/12-json-weather-apis/ * [[lpro:ws:rest_php|Exemple en php]] * WSDL : http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl * WSDL La poste : {{ :lpro:spec_ws_suivi_en.pdf |}} ===== Exercice 1 : Consommer des WebServices en PHP (Conversion de température Celsius -> fahrenheit) / Partie 1===== * http://www.w3schools.com/xml/tempconvert.asmx?WSDL * Client PHP __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 * URL : http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx * WSDL : http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?WSDL * 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 * [[lpro:ws:ws_avec_wsdl|Exemple avec fichier WSDL]] * {{ :lpro:151216.zip |}} * Exemple serveur php '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 '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 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."
" ; } catch (SoapFault $fault) { echo 'erreur : '.$fault; } // Affichage des requetes et reponses SOAP (pour debug) echo '
Requete SOAP : '.htmlspecialchars($client->__getLastRequest()).'
'; echo '
Reponse SOAP : '.htmlspecialchars($client->__getLastResponse()).'
'; echo '
'.var_dump($oReturn); ?>
* WSDL : server 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 'This SOAP server can handle following functions : '; echo ''; } ?> ====== Exercice 5 : Manipuler le format JSON (open data Nantes) ====== * Json http://www.php.net/manual/en/function.json-decode.php * Utilisez les URL ci-dessous et affichez les données : * http://data.nantes.fr/donnees/fonctionnement-de-lapi/getdisponibiliteparkingspublics/ * Créez un formulaire pour retrouver une adresse complète * https://adresse.data.gouv.fr/api/ * Créez une page album des dernières images flickr avec un formulaire de saisie: * http://api.flickr.com/services/feeds/photos_public.gne?tags=90210&tagmode=all&format=json&nojsoncallback=1 * Exemple Json * [[http://www.actualitix.com/utiliser-manipuler-fichier-json-php.html]] { "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 {'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."
" ; } echo "-------------------------
" ; } //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."
"; }
===== Exercice 6 ===== * [[lpro:exercice6|Rest exercice]] * 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://gomashup.com/cms/ http://www.zippopotam.us/ http://www.flickr.com/services/feeds/ http://blog.visual.ly/data-sources/ {{ :lpro:openapi.png?900 |}} {{ :lpro:twitter.png?800 |}} http://eusebius.developpez.com/php5dom/ $values=simplexml_load_file("http://....."); ===== Consommer des webservices ===== * **Exercices** : * [[conso-ws1 | Webservice population]] * 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 ==== * Weather [[http://developer.yahoo.com/weather/]] * Music [[http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20music.artist.search%20where%20keyword%3D%27Coldplay%27&diagnostics=true]] ==== Google ==== * Search [[https://www.googleapis.com/customsearch/v1?key=AIzaSyC_gM_6SV2kauoP4NyNx_4YVC370bpIzRk&cx=017576662512468239146:omuauf_lfve&q=tennis&callback=handleResponse&prettyprint=true]] * Search (JSON format) [[https://www.googleapis.com/customsearch/v1?key=AIzaSyC_gM_6SV2kauoP4NyNx_4YVC370bpIzRk&cx=017576662512468239146:omuauf_lfve&q=tennis&alt=json]] "; print_r($decode); echo ""; foreach($decode["items"] as $k=>$v) { echo utf8_decode($v["displayLink"])."
" ; } ?>
* http://search.twitter.com/search.atom?q=elkstein&count=5 * http://search.twitter.com/search.json?q=elkstein&count=5 ===== Création de webservice ===== * [[exercice1| 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" * [[lpro/ws/ex3 | Exercice 3]] : Créer un forumaire pour utiliser un moteur de recherche * [[.:Exercice4| Exercice 4]] : Formulaire interrogation XML API search de twitter * [[.:Exercice5| Exercice 5]] : Formulaire interrogation JSON API search de twitter * [[.:Exercice6| Exercice 6]] : Creer un WebService RESTful