HTML5 - CSS 2.x/3
PHP / MySQL
FORTH ...

Consommer un service web

Il n'y a aucun intérêt à consommer ses propres WS. En clair, votre serveur ne doit pas s'appeler lui-même, sauf si c'est pour faire des tests.

Cas d'école

Vous gérez un annuaire des gîte de randonnée. Il est assez facile de trouver ces annuaires avec leurs coordonnées GPS sur de nombreux sites web. Mais ce qui manque à ces gîtes, en dehors de leur localisation est l'altitude. Cette donnée peut être vitale pour des clients qui souffriraient de problèmes respiratoires ou cardiaques à haute altitude.

Comment récupérer l'altitude de ces gîtes et l'intégrer à la base de données?

La première solution: appeler les gérants de gîtes et leur poser la question: long et aléatoire.

La seconde solution: demander aux visiteurs qui connaissent lesdits gîtes de combler cette lacune: risqué si c'est pas la bonne donnée qui est saisie.

Pour notre part, nous avons choisi de poser la question directement à l'API de Google MAPS:

http://maps.googleapis.com/maps/api/elevation/xml?locations=45.2451,2.54276&sensor=false

Ici le paramètre location combine la latitude suivie de la longitude: 45.2451,2.54276. Nous supposons que pour chaque gîte nous avons déjà ces données.. Voici ce que nous renvoie l'API de Goggle Maps si on utilise notre URL:

<?xml version="1.0" encoding="UTF-8"?>
<ElevationResponse>
 <status>OK</status>
 <result>
  <location>
   <lat>45.2451000</lat>
   <lng>2.5427600</lng>
  </location>
  <elevation>966.8056030</elevation>
  <resolution>152.7032318</resolution>
 </result>
</ElevationResponse>

Ici la réponse est visible: 966.8056030, soit 966 mètres.

Donc, pour chaque visiteur de notre site d'information, voici la stratégie:

Appel du WS de l'API Google Maps sans ZF

Nous allons d'abord voir comment appeler l'APi de Google Maps sans ZF:

    /**
     * Récupère altitude d'un point géographique donné
     * @param   $lat     decimal    latitude
     * @param   $lon     decimal    longitude
     * @return  int      altitude en mètres, sans décimales
     */
    function getElevationFromGoogle($lat, $lon) {
        $url = "http://maps.googleapis.com/maps/api/elevation/"
             . "xml?locations=$lat,$lon&sensor=false";
        $result = file_get_contents($url);
        $xml = simplexml_load_string($result);
        return round($xml->result->elevation);
    }

Voilà. En quelques lignes de code, nous venons de créer notre première fonction qui consomme un WS!

Nous ne rentrerons pas dans le détail de l'exploitation de cette fonction.

Notez que l'API de Google Maps renvoie également un élément status avec la valeur OK. Par convention, beaucoup de WS renvoient un status mais pas tous. Il n'y a pas de règle ni de norme. A vous de consulter la documentation des WS disponibles et de les tester.

Nous avons donné dans notre cas d'école un scénario d'appel du WS de l'API de Google Maps. Nous vous déconseillons de faire des appels en rafale et trop grande quantité. Si vous procédez ainsi, Google va mettre votre serveur en liste noire! C'est pour cette raison que dans notre scénario la fiche d'un gîte n'est mise à jour que quand un utilisateur consulte cette fiche.

Ainsi votre base de données est fiabilisée au fil de l'eau et en fonction de la fréquentation réelle de votre site web. Rappelons que les fiches qui sont à jour ne génèrent aucun trafic vers l'API de Google Maps.

Tous les articles sur ce thème