Aller au contenu principal

Consommer une API en PHP

PHP et les API : La consommation côté serveur

Notions théoriques

Introduction aux appels API en PHP avec cURL

Le PHP (souvent utilisé pour le développement côté serveur) possède une bibliothèque puissante pour effectuer des requêtes HTTP : cURL.

Avec cURL, on peut facilement :

  • consommer des API REST,
  • envoyer des données,
  • gérer des headers HTTP
  • et plus encore.
remarque

cURL est un outil en ligne de commande et une bibliothèque pour transférer des données avec des syntaxes d'URL.

cURL supporte une variété de protocoles, ce qui le rend très polyvalent.

Avantages de la consommation d'API côté serveur

  • Sécurité : Les clés API et les données sensibles ne sont pas exposées au client.
  • Performance : On peut mettre en cache les réponses côté serveur pour améliorer la vitesse de chargement.
  • Contrôle : On gère la logique de traitement des données avant de les envoyer au client.

Exercice pratique

Nous allons interroger l'API de Open Library pour obtenir des informations sur un livre spécifique.

  1. Créez un dossier tp-api-openlibrary dans le dossier de vos Documents.
  2. Créez un fichier index.php dans le dossier tp-api-openlibrary.
  3. Ajoutez le code suivant pour effectuer une requête GET vers l'API Open Library :
<?php

$ISBN = "9782206306988";

// Initialisation de cURL
$curl = curl_init();

// Configuration de l'URL et des autres options
curl_setopt($curl, CURLOPT_URL, "https://openlibrary.org/search.json?isbn=" . $ISBN);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

// Exécution de la requête et récupération de la réponse
$response = curl_exec($curl);

// Fermeture de la session cURL
curl_close($curl);

// Décodage de la réponse JSON
$data = json_decode($response, true);

// Affichage des informations sur le livre
$bookData = $data['docs'][0]; // Accès au premier document retourné

print("<h1>Informations sur le livre</h1>");

// Titre
print("<p>Titre : " . $bookData['title'] . "</p>");

// Éditeurs
print("<p>Éditeurs : " . implode(', ', $bookData['publisher']) . "</p>");

// Couverture
print("<p>Couverture : <img src='https://covers.openlibrary.org/b/id/"
. $bookData['cover_i'] . "-M.jpg' alt='Couverture du livre'></p>");
  1. Ouvrez un Terminal (Invite de commandes) dans votre dossier tp-api-curl.
  2. Saisissez la commande php -S localhost:8000.
  3. Ouvrez votre navigateur à l'adresse : http://localhost:8000
Version avec plus d'informations

<?php

$ISBN = "9782206306988";

// Initialisation de cURL
$curl = curl_init();

// Configuration de l'URL et des autres options
curl_setopt($curl, CURLOPT_URL, "https://openlibrary.org/search.json?isbn=" . $ISBN);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

// Exécution de la requête et récupération de la réponse
$response = curl_exec($curl);

// Fermeture de la session cURL
curl_close($curl);

// Décodage de la réponse JSON
$data = json_decode($response, true);

// Affichage des informations sur le livre
$bookData = $data['docs'][0]; // Accès au premier document retourné

print("<h1>Informations sur le livre</h1>");

// Titre
print("<p>Titre : " . $bookData['title'] . "</p>");

// Nombre de pages
print("<p>Nombre de pages : " . $bookData['number_of_pages_median'] . "</p>");

// Éditeurs
print("<p>Éditeurs : " . implode(', ', $bookData['publisher']) . "</p>");

// Auteurs
print("<p>Auteurs : ");
foreach ($bookData['author_name'] as $authorName) {
print($authorName . " ");
}
print("</p>");

// Couverture
print("<p>Couverture : <img src='https://covers.openlibrary.org/b/id/"
. $bookData['cover_i'] . "-M.jpg' alt='Couverture du livre'></p>");

// Lien vers la ressource
print("<p>Lien vers la ressource : <a href='https://openlibrary.org"
. $bookData['key'] . "'>OpenLibrary.org</a></p>");

Version avec htmlspecialchars()

<?php

$ISBN = "9782206306988";

// Initialisation de cURL
$curl = curl_init();

// Configuration de l'URL et des autres options
curl_setopt($curl, CURLOPT_URL, "https://openlibrary.org/search.json?isbn=" . $ISBN);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

// Exécution de la requête et récupération de la réponse
$response = curl_exec($curl);

// Fermeture de la session cURL
curl_close($curl);

// Décodage de la réponse JSON
$data = json_decode($response, true);

// Affichage des informations sur le livre
$bookData = $data['docs'][0]; // Accès au premier document retourné

print("<h1>Informations sur le livre</h1>");

// Titre
print("<p>Titre : " . htmlspecialchars($bookData['title']) . "</p>");

// Nombre de pages
print("<p>Nombre de pages : " . htmlspecialchars($bookData['number_of_pages_median']) . "</p>");

// Éditeurs
print("<p>Éditeurs : " . htmlspecialchars(implode(', ', $bookData['publisher'])) . "</p>");

// Auteurs
print("<p>Auteurs : ");
foreach ($bookData['author_name'] as $authorName) {
print(htmlspecialchars($authorName) . " ");
}
print("</p>");

// Couverture
print("<p>Couverture : <img src='https://covers.openlibrary.org/b/id/"
. htmlspecialchars($bookData['cover_i']) . "-M.jpg' alt='Couverture du livre'></p>");

// Lien vers la ressource
print("<p>Lien vers la ressource : <a href='https://openlibrary.org"
. htmlspecialchars($bookData['key']) . "'>OpenLibrary.org</a></p>");

Version complète avec gestion des erreurs
astuce

Si vous obtenez cette erreur : Fatal error: Uncaught Error: Call to undefined function curl_init(), pensez à installer/activer cURL sur votre serveur PHP.

Test de mémorisation/compréhension


Quel outil PHP utilise-t-on pour effectuer des requêtes HTTP ?


Quel est l'avantage principal de la consommation d'API côté serveur par rapport au côté client ?


Que doit-on faire après avoir exécuté une session `cURL` en PHP ?


Pourquoi est-il important de définir CURLOPT_RETURNTRANSFER en PHP lors de l'utilisation de `cURL` ?


Quel format de données est souvent utilisé pour communiquer avec des API REST et est facilement traitable en PHP ?



TP pour réfléchir et résoudre des problèmes

Mission : Créer une interface web en PHP pour rechercher des informations sur des livres via l'API de Google Books.

  1. Créez un dossier tp-api-googlebooks dans le dossier de vos Documents.
  2. Créez un fichier index.php dans le dossier tp-api-googlebooks.
  3. Créez un formulaire HTML avec un champ de saisie pour l'ISBN d'un livre.
  4. Écrivez un script PHP qui utilise cURL pour interroger l'API de Google Books avec l'ISBN fourni.
  5. Affichez le titre, les auteurs et la couverture du livre sur la page.
  6. Saisissez la commande php -S localhost:8000.
  7. Ouvrez votre navigateur à l'adresse : http://localhost:8000

Corrigé du TP :

Une solution
attention

Assurez-vous de ne pas exposer votre clé API ou d'autres données sensibles lors de la mise en production de votre application.

astuce

Dépôt d'APIs publiques géré manuellement par des membres de la communauté.

https://github.com/public-apis/public-apis

Ce dépôt comprend une longue liste d'API publiques provenant de nombreux domaines que vous pouvez utiliser pour vos propres applications.