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.
 
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.
- Créez un dossier 
tp-api-openlibrarydans le dossier de vosDocuments. - Créez un fichier 
index.phpdans le dossiertp-api-openlibrary. - 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>");
- Ouvrez un Terminal (Invite de commandes) dans votre dossier 
tp-api-curl. - Saisissez la commande 
php -S localhost:8000. - 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
Vous devez être connecté pour voir le contenu.
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
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.
- Créez un dossier 
tp-api-googlebooksdans le dossier de vosDocuments. - Créez un fichier 
index.phpdans le dossiertp-api-googlebooks. - Créez un formulaire HTML avec un champ de saisie pour l'ISBN d'un livre.
 - Écrivez un script PHP qui utilise 
cURLpour interroger l'API de Google Books avec l'ISBN fourni. - Affichez le titre, les auteurs et la couverture du livre sur la page.
 - Saisissez la commande 
php -S localhost:8000. - Ouvrez votre navigateur à l'adresse : 
http://localhost:8000 
Corrigé du TP :
Une solution
Vous devez être connecté pour voir le contenu.
Assurez-vous de ne pas exposer votre clé API ou d'autres données sensibles lors de la mise en production de votre application.
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.