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-openlibrary
dans le dossier de vosDocuments
. - Créez un fichier
index.php
dans 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-googlebooks
dans le dossier de vosDocuments
. - Créez un fichier
index.php
dans 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
cURL
pour 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.