Connexion à une API: Utilisation des API

Les données sont présentées sous divers formats. Vous trouverez dans le présent document de l'information, des conseils et des suggestions sur la façon d'utiliser certains des formats présentés dans le Portail de données ouvertes ainsi que la façon de travailler avec des interfaces de programmation d'applications (API).

De manière générale, les API s'adressent aux développeurs. Cette section donne des exemples dans lesquels on utilise différents outils et langages de programmation. Si vous ne possédez aucune expérience de la programmation, vous pouvez consulter le Portail de données ouvertes pour accéder aux jeux de données.

Sur cette page

Utilisation de la commande cURL

La commande cURL est un outil que l'on utilise sur la ligne de commande pour transférer des données en provenance ou à destination d'un serveur avec différents protoc9oles TCP/IP. Dans ce cas-ci, nous examinons la façon d'utiliser cette commande pour demander des données à une API HTTP RESTful. La commande peut être installée dans des plates-formes Windows, OSX ou Linux.

Windows

OSX

Linux

  • Utiliser un gestionnaire de produit, tel YUM ou APT-GET, ou l'installateur de progiciel de l'interface graphique ou
  • Télécharger cURL (anglais seulement).

Une fois la commande cURL installée, vous pouvez y accéder sur la ligne de commande en tapant simplement curl. Cette opération ne produit aucun résultat et permet uniquement de confirmer l'installation de la commande. Vous devez préciser, au minimum, l'URL de destination.

Il y a des API qui demandent certains paramètres, y compris les en-têtes HTTP. Pour réussir à communiquer avec certains API, vous devez également entrer des paramètres, y compris les en-têtes HTTP. Dans notre exemple, l'API permet de définir les en-têtes Accept et Accept-Language headers.

curl -H "Accept: application/json" -H "Accept-Language: en" \
  "http://www.earthquakescanada.nrcan.gc.ca/api/v2/locations/" > data-raw.json

Par défaut, la commande cURL affiche sur l'écran de la console (STDOUT) la réponse en provenance de la destination. Dans l'exemple ci-dessus, la sortie est redirigée vers un fichier nommé data-raw.json qui contient le jeu de données anglais en format JSON.

Figure 1 - Réponse brute en format JSON
Figure 1
Description accessible de la Figure 1

Saisie d'écran d'un fichier de réponse JSON en format brut minifié.

Dans la plupart des cas, la réponse est optimisée (minifiée) afin de réduire la taille du transfert de fichier (Figure 6). Vous pouvez utiliser un autre outil de ligne de commande, tel jsonpp (anglais seulement), pour formater les données en une sortie lisible par un humain (figure 7).

Figure 2 - Réponse JSON formatée en mode « pretty print »
Figure 2
Description accessible de la Figure 2

Saisie d'écran d'un fichier de réponse JSON formaté en mode « pretty print » aux fins de lisibilité par un humain.

La majorité des navigateurs offrent des plugiciels, outils utilisés pour interagir avec les API RESTful. Ces outils permettent de configurer les paramètres et les en-têtes, de récupérer une réponse et de visualiser les données. Ils peuvent être très utiles pour explorer rapidement les données d'API. Effectuez une recherche dans le répertoire de plugiciels de votre navigateur pour connaître ceux que vous pouvez utiliser.

Utilisation des langages de programmation

La majorité des langages de programmation modernes ont la capacité d'accéder aux ressources réseau, tels les services HTTP, soit en mode natif, ou par l'entremise de bibliothèques. Nous aborderons quelques exemples simples sur la façon de commencer à utiliser certains langages courants utilisés pour développer des applications Web et mobiles permettant d'accéder à une API RESTful.

Les programmes donnés en exemple ci-dessous illustrent la façon d'interroger une API et d'analyser la réponse JSON. La réponse est analysée pour afficher le nom du résultat et être répétée dans un des groupes de résultats.

PHP

L'exemple PHP suivant utilise la commande cURL :

<?php
/**
 * Exemple simple de script PHP utilisé pour interroger une API.
 *
 * @license https://ouvert.canada.ca/fr/licence-du-gouvernement-ouvert-canada
 */

// Demander l'URL
$url = 'http://www.earthquakescanada.nrcan.gc.ca/api/earthquakes/';

// Request HTTP headers
$headers = array(
    'Accept: application/json',
    'Accept-Language: en'
);

// Configurer les options cURL 
curl_setopt($cu, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($cu, CURLOPT_HTTPHEADER, $headers);

// Exécuter la demande cURL
$response = curl_exec($cu);

// Fermer l'objet cURL de manière appropriée
curl_close($cu);

// Afficher les données de réponse
if ($response) {
    $json = json_decode($response);
    echo "{$json->metadata->request->name->en}\n";
    foreach($json->latest as $key=>$value) {
        echo "{$key} -> {$value}\n";
    } 
}

Sortie :

Earthquake listings available 
7d -> /api/v2/locations/7d.json 
30d -> /api/v2/locations/30d.json 
365d -> /api/v2/locations/365d.json 

Python

L'analyseur Python requiert les deux bibliothèques (json et requests) utilisées dans l'exemple qui suit :

#!/usr/local/bin/python
# coding=utf-8
"""
 Exemple simple de script Python utilisé pour interroger une API.

 @license: https://ouvert.canada.ca/fr/licence-du-gouvernement-ouvert-canada
"""
import json
import requests

url      = 'http://www.earthquakescanada.nrcan.gc.ca/api/earthquakes/'
options  = { "Accept":"application/json", "Accept-Language":"en" }
response = requests.get(url, headers=options)
jdata    = response.json()

print jdata['metadata']['request']['name']['en']

for (key, value) in jdata['latest'].items():
    print key, "->", value

Sortie :

Earthquake listings available 
365d -> /api/v2/locations/365d.json 
7d -> /api/v2/locations/7d.json 
30d -> /api/v2/locations/30d.json 

Bibliothèque jQuery pour JavaScript

L'exécution de JavaScript dans un navigateur est assujettie à des restrictions concernant la sécurité des connexions à des sites Web tiers. Par défaut, les navigateurs interdisent les interrogations à distance, qu'ils considèrent être des scripts entre sites (Cross-Site Scripting (XSS)). Ces interrogations sont autorisées lorsque la réponse de l'API contient un en-tête HTTP Access-Control-Allow-Origin approprié qui permet les interrogations externes. Dans l'exemple qui suit, une connexion d'API est effectuée avec la bibliothèque jQuery (anglais seulement).

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Démonstration d'un appel d'API avec jQuery</title>
</head>
<body>

<div id="short"></div>
---
<div id="long"></div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
/**
 * Exemple simple de script jQuery JavaScript utilisée pour interroger une API.
 *	
 * @license https://ouvert.canada.ca/fr/licence-du-gouvernement-ouvert-canada
 */
(function( $ ) {
    $(document).ready(function() {

        // Méthode abrégée
        $.getJSON('http://www.earthquakescanada.nrcan.gc.ca/api/earthquakes/', 
            function(json) {
                $('#short').append(json.metadata.request.name.en + '<br />');
                $.each(json.latest, function(idx, item) {
                    $('#short').append(idx + ' -> ' + item + '<br />');
                });
                return;
            }
        );

        // Méthode étendue
        $.ajax({
            url: 'http://www.earthquakescanada.nrcan.gc.ca/api/earthquakes/',
            dataType: 'json',
            headers: { 
                'Accept'          : 'application/json', 
                'Accept-Language' : 'fr' 
            },
            crossDomain: true,
            type: 'GET',
            success: function(json) {                        
                $('#long').append(json.metadata.request.name.fr + '<br />');
                $.each(json.latest, function(idx, item) {
                    $('#long').append(idx + ' -> ' + item + '<br />');
                });
                return;
            },
            error: function(req, status, error) {
                $('#long').append(
                    status.toString() + ': ' + 
                    error.toString()
                );
                return;
            },
        });
    });
})( jQuery );
</script>
</body>
</html>

Sortie :

Earthquake listings available 
7d -> /api/v2/locations/latest/7d.json 
30d -> /api/v2/locations/latest/30d.json 
365d -> /api/v2/locations/latest/365d.json 
--- 
Annonces de séismes disponibles 
7d -> /api/v2/locations/latest/7d.json 
30d -> /api/v2/locations/latest/30d.json 
365d -> /api/v2/locations/latest/365d.json 

Java

Plusieurs bibliothèques de tiers pour Java SE facilitent le travail avec les données JSON. Dans l'exemple qui suit, nous utilisons la bibliothèque JSON.org (anglais seulement), également accessible par l'entremise de Maven (anglais seulement).

package com.tbs.devcorner.simple;
/**
 * Exemple simple de programme Java utilisé pour interroger une API.
 * @license https://ouvert.canada.ca/fr/licence-du-gouvernement-ouvert-canada
 *
 * Énoncé Dependency de Maven :
 *   <dependency>
 *     <groupId>org.json</groupId>
 *     <artifactId>json</artifactId>
 *     <version>20131018</version>
 *   </dependency>
 */
import java.io.*;
import java.net.*;
import org.json.*;

public class App 
{
    public static void main( String[] args )
    {
        try {
            // Créer la connexion
            URL api_url = new URL("http://www.earthquakescanada.nrcan.gc.ca/api/earthquakes/");
            URLConnection api = api_url.openConnection();

            // Définir les en-têtes HTTP
            api.setRequestProperty("Accept", "application/json");
            api.setRequestProperty("Accept-Language", "en");

            // Obtenir la réponse
            JSONTokener tokener = new JSONTokener(api.getInputStream());
            JSONObject jsondata = new JSONObject(tokener);

            // Afficher le nom de l'API
            System.out.println(jsondata.getJSONObject("metadata")
                                       .getJSONObject("request")
                                       .getJSONObject("name")
                                       .get("en").toString());

            // Répéter l'opération sur les liens les plus récents
            JSONObject latest = jsondata.getJSONObject("latest");
            for (Object item : latest.keySet()) {
                System.out.println(item.toString() + " -> " + latest.get(item.toString()));
            }

        } catch (MalformedURLException e) {
            System.out.println("URL mal formée");
        } catch (IOException e) {
            System.out.println("Erreur d'E/S");
        }
    }
}

Output:

Earthquake listings available 
7d -> /api/v2/locations/7d.json 
30d -> /api/v2/locations/30d.json 
365d -> /api/v2/locations/365d.json
Date de modification :