Skip to content

Instantly share code, notes, and snippets.

@aliastim
Last active March 17, 2019 11:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aliastim/c0d42ba286426f875af38ffc99845bf3 to your computer and use it in GitHub Desktop.
Save aliastim/c0d42ba286426f875af38ffc99845bf3 to your computer and use it in GitHub Desktop.

Appel d'une API en php 📖

Nous allons ici découvrir simplement comment paramétrer un appel vers une librairie externe (API) en PHP. Pour ceci, nous allons notamment nous intéresser à la bibliothèque cURL.

CURL, c'est quoi ?

Comme dit dans l'introduction cURL est une bibliothèque très utile en PHP qui permet de communiquer avec un site internet distant. Elle permet ainsi de réaliser des requêtes CRUD (Create Read Update Delete) via des API à condition qu'on en ai l'accès. Mais généralement, on s'en sert principalement pour afficher des données externes (READ), ce qui par ailleurs nécéssite moins de conditions, puisque les données sont souvent publiques.

Comment on s'en sert ?

Dans l'exemple ci-dessous, nous allons faire un simple appel d'API pour lire le contenu de mes gists github.

Au préalable

En fonction de l'API appelée, les sites n'autorisent pas toujours les appels anonymes. Bien souvent, il faudra obtenir sur les paramètres du site en question un Token d'accès. C'est notamment le cas de l'API d'Instagram par exemple. Cela permet de s'authentifier et de garantir plus de sécurité.
Sur l'API de Github dont nous allons nous servir, nous allons nous connecter de façon anonyme, de cette manière, Github limite le nombre de connexions à 60 par heure. Pour une utilisation plus importante, il est conseillé de faire un appel avec un token et de mettre les requêtes en cache pour moins solliciter l'API.

1️⃣ Pour commencer

Dans un premier temps, nous allons avoir besoin au minima du lien JSON du site internet qui nous intéresse (ici Github) et qui va rescenser les informations que nous souhaitons traiter.
Celui-ci se trouve généralement dans les paramètres d'API du site auquel on souhaite avoir accès.

Dans le cas de Github, l'API est assez facile d'accès :
Pour accéder à ses repository : https://api.github.com/users/MONPSEUDO/repos
Pour accéder à ses gists : https://api.github.com/users/MONPSEUDO/gists

2️⃣ Initier la requête

Maintenant que nous avons obtenu le lien qui conduit aux informations souhaitées, nous allons créer une variable qui va l'instancier avec cURL :

$curl = curl_init('https://api.github.com/users/MONPSEUDO/gists');

Dans de nombreux cas, comme par exemple dans l'API d'Instagram, plusieurs paramètres vont se transmettre via l'URL, dans ces cas là, nous définierons ces paramètres dans des variables que nous appellerons dans l'URL :

$count = "40"; //Limite de photos à appeler
$access_token = 'VOTRE_ACCESS_TOKEN'; //Token d'accès personnel à un compte
$endpoint = "https://api.instagram.com/v1/users/self/media/recent/?access_token=$access_token&count=$count";

$curl = curl_init($endpoint);

3️⃣ Préparer la requête

Une fois la requête initiée, il nous faut maintenant la préparer (avec la méthode "curl_setopt()" pour rentrer des paramètres un par un ou avec "curl_setopt_array()" pour envoyer un tableau de paramètres) en précisant certains paramètres, dans l'exemple de Github, voici ce que ça va donner :

curl_setopt_array($curl, [
    CURLOPT_USERAGENT => 'MONPSEUDO',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 3,
    CURLOPT_SSL_VERIFYPEER => false
]);

Ici, nous envoyons un tableau de paramètres à notre requête API :

  • Nous appelons dans un premier temps notre URL d'API : $curl
  • CURLOPT_USERAGENT (Spécifique à Github) permet de s'authentifier comme utilisateur Github
  • CURLOPT_RETURNTRANSFER permet de retourner le contenu dans une variable et non de l'afficher
  • CURLOPT_TIMEOUT permet de définir le temps (en seconde) maximal à ne pas dépasser pour la connexion
  • CURLOPT_SSL_VERIFYPEER permet de ne pas vérifier le certificat de sécurité

4️⃣ Exécuter la requête

Tout est prêt, il ne nous manque plus qu'à exécuter la requête pour retourner du contenu, pour cela, nous utilisons la méthode curl_exec :

$data = json_decode(curl_exec($curl));

ici, nous retournons dans une variable data, toutes les informations tranmises par l'API sous forme d'objets grâce à la méthode json_decode.
Il est également possible d'afficher un tableau associatif en ajoutant "true" :
($data = json_decode(curl_exec($curl), true);

Les données sont visibles avec un var_dump($data);

Une fois la requête exécutée et les données misent dans une variable, il ne reste plus qu'à fermer la session cURL :

curl_close($curl);

5️⃣ Traiter les informations

Vous retournez dorénavant les informations envoyées par votre API, vous pouvez maintenant les traiter pour n'afficher que les informations qui vous semblent pertinentes:

    foreach ($data as $value)
    {
        <p> Url de votre gist : $value['url'] </p>
        <p> Créé le : $value['created_at'] </p>
        <p> Mis à jour le : $value['updated_at'] </p>
    }

Pour aller plus loin

Si vous souhaitez aller plus loin dans la réalisation d'API, je vous invite à jeter un oeil à mes repositories concernernant l'API de Github et celle d'instagram :

Plus de renseignements sur les connexions avec une API

Je vous conseille également de vous intéresser à la mise en cache en PHP qui est fortement recommandé dans le cadre d'un appel à une API, puisque celle-ci réalise de nombreuses connexions, l'API peut ralentir votre site et créer des problèmes si le site ou l'API appelée ne fonctionne pas.
Pour cela, je vous conseille de regarder le tutoriel OpenClassroom sur la mise en cache en PHP

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment