Services web

← Le volet web · 39 diapositives · flèches ou clic pour avancer

AVEC LE PHP et le JAVA - SERVICES - WEB - par Nadine Giasson St-Amand
Diapositive 2 du diaporama Services web
<mouton> - <nom>Dolly</nom> - <couleur>Noire</couleur> - </mouton> - DAO - recevoir le xml dans la variable XML - String xmlMouton; - Mouton mouton; - recevoir - parser
Format - du - service web - en texte xml ou json
Format du service web - Un service en lecture seule - http://bergerie.services/mouton/3/ retourne le xml de un mouton - http://bergerie.services/mouton/liste/ retourne le xml de la liste des moutons - http://bergerie.services/troupeau/4/ retourne le xml de un troupeau + ses moutons - Un service en écriture - http://bergerie.services/troupeau/4/ajouter/ -…
Format du service web - Lire un mouton - avec réécriture des url http://bergerie.services/mouton/3/ - sans réécriture des url http://bergerie.services/mouton.php?mouton=3 - Lire tous les moutons - avec réécriture des url http://bergerie.services/mouton/liste/ - sans réécriture des url http://bergerie.services/liste-mouton.php - Format d'URL & format de transfert
Format du service web - <liste-mouton> - <mouton> - <id>1</id> - <nom>Dolly</nom> - <description>joyeuse</description> - <mouton> - <mouton> - <id>2</id> - <nom>Billy</nom> - <description>rapide</description> - <mouton> - </liste-mouton> - Format de XML pour la liste d'objet
Format du service web - <moutons> - <mouton> - <id>1</id> - <nom>Dolly</nom> - <description>joyeuse</description> - <mouton> - <mouton> - <id>2</id> - <nom>Billy</nom> - <description>rapide</description> - <mouton> - </moutons> - Format de XML pour la liste d'objet - String 00110010 =parser=> int 0000 0010
<troupeau> - <creation>2002-10-10</creation> - <grange>Grange Orange</grange> - <veterinaire>Dr Mouton</veterinaire> - <mouton> - <id>1</id> - <nom>Dolly</nom> - <description>joyeuse</description> - <mouton> - <mouton> - <id>2</id> - <nom>Billy</nom> - <description>rapide</description> - <mouton> - </troupeau> - Format du service web - Format de XML pour la liste d'objet - String 00110010…
Découper les valeurs les unes des autres - Transformer les valeurs qui n'ont pas le bon type - PARSER
Format du service web - <?xml version="1.0" encoding="UTF-8"?> <mouton> <id>2</id> <nom>Billy</nom> <description>rapide</description> <naissance></naissance> <sexe></sexe> <couleur></couleur> <sousespece></sousespece> <troupeau>1</troupeau> </mouton> - Format de XML pour un objet
Exemple de services existants - Pokeapi : données des Pokémons https://pokeapi.co/ - https://pokeapi.co/api/v2/pokemon/1/ - https://pokeapi.co/api/v2/type/3/ - https://pokeapi.co/api/v2/ability/2/ - Quotemedia : Informations de la bourse http://www.quotemedia.com/apifeeds/ - http://www.quotemedia.com/apifeeds/xml_sample - http://app.quotemedia.com/data/getQuotes.xml?symbols=ORCL&webmasterId=XXXXX…
Exemple de services existants - <results> <copyright>Copyright (c) 2010 QuoteMedia, Inc.</copyright> <symbolcount>1</symbolcount> <quote symbolstring="ORCL" datatype="equity" entitlement="DL" delaymin="15" datetime="2011-03-17T18:26:13-04:00"> <key> <symbol>ORCL</symbol> <exchange>NGS</exchange> </key> <equityinfo> <longname>Oracle Corp.</longname> <shortname>ORCL</shortname> </equityinfo>…
Exemple de services existants - { "effect_changes": [], "effect_entries": [ { "effect": "Moves cannot score critical hits against this Pok\u00e9mon.\n\nThis ability functions identically to shell armor.", "language": { "name": "en", "url": "https://pokeapi.co/api/v2/language/9/" }, "short_effect": "Protects against critical hits." } ], "flavor_text_entries": [ { "flavor_text":…
Création du .htaccess dans Win - Avec le réseau - Télécharger en sftp ou via le drive un fichier .htaccess - Le déplacer et modifier son contenu - Multi-étape - Créer un fichier test.txt dans l'explorateur - Invite de commande - cd Desktop - move text.txt .htaccess - Dans Git Bash - touch .htaccess - Dans Invite de commande Windows - cd Desktop - echo "" >> .htaccess - Malgré la prévention contre…
Production - du - service web - avec PHP
Configuration du serveur php - Lancer la console en administrateur - choco install bitnami-xampp - Dans C:\Bitnami\wampstack-5.6.31-0\php\php.ini - opcache.enable=0 - Puis redémarrer Apache - Faire un raccourci 'www' sur le bureau du webroot - C:\Bitnami\wampstack-7.1.22-0\apache2\htdocs - Tests en view source car c'est du XML - view-source:http://localhost/service.bergerie/liste-moutons.php -…
Code PHP de connection - <?php $usager = 'root'; $motdepasse = ''; $hote = 'localhost'; $base = 'bergerie'; $dsn = 'mysql:dbname='.$base.';host=' . $hote; $basededonnees = new PDO($dsn, $usager, $motdepasse); ?> - Factorisé pour le changer une seule fois
Code PHP - Service d'une liste - <?php - // LECTURE des données include "../../basededonnees.php"; - $SQL_LISTE_MOUTON = - "SELECT id_mouton, nom, description FROM mouton"; - $requeteListeMoutons = $basededonnees->prepare($SQL_LISTE_MOUTON); - $resultat = $requeteListeMoutons->execute(); - $listeMoutons = $requeteListeMoutons->fetchAll(PDO::FETCH_OBJ); - // Affichage des données - ?> - Lecture…
Code PHP - Service d'une liste - <?php - header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <moutons> <?php foreach($listeMoutons as $mouton) { //print_r($mouton); ?> <mouton> <id><?=$mouton->id_mouton?></id> <nom><?=$mouton->nom?></nom> <description><?=$mouton->description?></description> </mouton> <?php } ?> </moutons> - Affichage des données en format XML
Code PHP - Service d'une liste - <?php - header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <listeMoutons> <?php foreach($listeMoutons as $mouton) { //print_r($mouton); ?> <mouton> <id><?=$mouton->id_mouton?></id> <nom><?=$mouton->nom?></nom> <description><?=$mouton->description?></description> </mouton> <?php } ?> </listeMoutons> - Affichage des données en format…
Filtres sur l'input (php_filter) - Validation = annuler si non-conforme - $idMouton = filter_input(INPUT_GET, 'mouton', FILTER_VALIDATE_INT); - $idMouton = $_GET['mouton']; $idMouton = filter_var($idMouton, FILTER_VALIDATE_INT); - Nettoyage = garder la bonne partie de donnée - $idMouton = filter_input(INPUT_GET, 'mouton', FILTER_SANITIZE_NUMBER_INT); - $idMouton = $_GET['mouton']; $idMouton =…
Première version de test - Lire les données de la base de données - Afficher les données dans le bon format - Avant de faire la release itérative - Protéger avec les php filter - Convertir les requêtes en requêtes préparées (+ liaison dynamique des paramètres bindParam()) - Dans une seconde itération - Factoriser les DAO - Préparer les URL sémantiques parfaites Avec mod_rewrite - Évolution du…
Consommation - du - service web - avec Java
Java & XML
Récupérer le XML en Java - Vanille (Sans librairie externe) - Avec URL & URLConnection - Avec HttpEntity & EntityUtil - Avec HttpGet & BasicResponseHandler - Avec Spring - Avec le framework de service web - https://drive.google.com/drive/folders/0Bwi_aZJNZ9UqWC1NZTBzVVBlWGc?usp=sharing - Différentes manières
Récupérer le XML en Java - HttpClient client = new DefaultHttpClient(); - HttpResponse reponse = client.execute(new HttpGet(URL)); - HttpEntity entite = reponse.getEntity(); - String xml = EntityUtils.toString(entite, "UTF-8"); - System.out.println(xml); - Avec HttpEntity & EntityUtil
Récupérer le XML en Java - HttpClient client = new DefaultHttpClient(); - HttpResponse reponse = client.execute(new HttpGet(URL)); - String xml = new BasicResponseHandler().handleResponse(reponse); - System.out.println(xml); - Avec HttpGet & BasicResponseHandler
Récupérer le XML en Java - URL url = new URL(" http://www.service.com/ "); - URLConnection service = url.openConnection(); - InputStream flux = service.getInputStream(); - Scanner lecteur = new Scanner(flux).useDelimiter("\\A"); - String xml = lecteur.hasNext() ? lecteur.next() : ""; - System.out.println(xml); - Avec URL & URLConnection
Interpréter le XML en Java - import org.w3c.dom.Document; - import org.w3c.dom.Element; - import org.w3c.dom.NodeList; - DocumentBuilder parseur = DocumentBuilderFactory . newInstance() . newDocumentBuilder(); - @SuppressWarnings ( "deprecation" ) - Document document = parseur . parse( new StringBufferInputStream(xml)); - // String racine = document . getDocumentElement() . getNodeName(); -…
Interpréter le XML en Java - for ( int position = 0 ; position < listeNoeudsPensees . getLength(); position ++ ) - { - Element noeudPensee = (Element)listeNoeudsPensees . item(position); - String id = noeudPensee . getElementsByTagName( "id" ) . item( 0 ) . getTextContent(); - String auteur = noeudPensee . getElementsByTagName( "auteur" ) . item( 0 ) . getTextContent(); - String message =…
Java & JSON
Récupérer le json HTTPS - String SOURCE = "https://pokeapi.co/api/v2/"; String SOURCE_POKEMON = SOURCE + "pokemon/33/"; String jsonPokemon = null; - URL urlPokemon = new URL(SOURCE_POKEMON); - URLConnection connection = urlPokemon.openConnection(); - connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95…
Interpréter le Json - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import modele.Pokemon; - Gson parseur = new GsonBuilder().create(); //new Gson(); Pokemon pokemon = parseur.fromJson( jsonPokemon, Pokemon.class ); - Exemple de code
Consommation - du - service web - avec Java + Spring
Récupérer le XML en Java - RestTemplate service = new RestTemplate(); - ReponseListePhrase reponseListePhrase = - service.getForObject("http://localhost/service-inspiration/phrase/liste/nombre/", ReponseListePhrase.class); - System.out.println(reponseListePhrase.getNombre() + " phrases."); - Avec le framework de service web - import javax.xml.bind.annotation.XmlRootElement; -…
Récupérer le JSON en Java - public class ReponseCitation { private String type; private Citation value; public String getType() { return type; } public void setType(String type) { this.type = type; } public Citation getValue() { return value; } public void setValue(Citation value) { this.value = value; } } - La classe de réception
Récupérer le JSON en Java - RestTemplate service = new RestTemplate(); ReponseCitation reponseCitation = service.getForObject("http://gturnquist-quoters.cfapps.io/api/random", ReponseCitation.class); List<HttpMessageConverter<?>> convertisseurs = service.getMessageConverters(); convertisseurs.add(new GsonHttpMessageConverter()); service.setMessageConverters(convertisseurs);…
Interprétation - du - service web - avec Java + Spring