API en PHP : REST, GraphQL et gRPC — que choisir en 2025 ?

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : l'API n'est pas de la magie, c'est un outil

\n

Lorsque votre site PHP cesse d'être une simple page statique et commence à communiquer avec le monde extérieur — bots Telegram, passerelles de paiement ou votre propre application mobile — vous rencontrez inévitablement une API (Application Programming Interface). C'est simplement un contrat : « Si tu m'envoies une requête dans ce format, je te retourne les données ». Aujourd'hui, sur la scène PHP, trois acteurs principaux : le classique REST, le flexible GraphQL et l'audacieux gRPC. Lequel choisir ? Découvrons-le avec des exemples concrets.

\n

Cet article est destiné à ceux qui savent déjà coder en PHP et souhaitent élargir leurs horizons. Nous ne nous contenterons pas de copier la documentation, mais nous examinerons chaque protocole avec les yeux d'un développeur confronté à un problème réel.

\n\n

API REST en PHP : un classique éprouvé

\n

REST (Representational State Transfer) n'est pas un protocole, mais un style architectural. Il utilise les méthodes HTTP (GET, POST, PUT, DELETE) pour travailler avec des ressources. Si vous avez déjà écrit file_get_contents('https://api.example.com/users') — vous avez déjà travaillé avec REST.

\n

Pourquoi REST reste-t-il roi ?

\n
    \n
  • Simplicité : tout client HTTP peut fonctionner avec.
  • \n
  • Mise en cache : au niveau HTTP, les requêtes GET peuvent être mises en cache.
  • \n
  • Large support : de curl aux bibliothèques spécialisées.
  • \n
\n

Exemple de client REST en PHP avec Guzzle

\n

La bibliothèque Guzzle est la norme de facto pour les requêtes HTTP en PHP. Installez-la via Composer : composer require guzzlehttp/guzzle.

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client([\n    'base_uri' => 'https://jsonplaceholder.typicode.com/',\n    'timeout'  => 5.0,\n]);\n\n// Requête GET\n$response = $client->get('posts/1');\n$post = json_decode($response->getBody(), true);\necho "Titre du post : " . $post['title'] . PHP_EOL;\n\n// Requête POST\n$response = $client->post('posts', [\n    'json' => [\n        'title' => 'Nouveau post',\n        'body' => 'Texte du post',\n        'userId' => 1\n    ]\n]);\necho "Post créé avec l'ID : " . json_decode($response->getBody(), true)['id'];\n?>
\n

Qu'avons-nous fait ? Simplement envoyé des requêtes HTTP. REST ne nécessite pas de bibliothèque spéciale — on peut même utiliser file_get_contents() avec un contexte, mais Guzzle offre une gestion pratique des erreurs, des middleware et un transfert en flux.

\n

Quand REST n'est-il pas le meilleur choix ?

\n

Si vous devez récupérer des données liées (par exemple, un post + l'auteur + les commentaires), REST vous obligera à faire plusieurs requêtes. C'est là que GraphQL entre en scène.

\n\n

GraphQL en PHP : ne demandez que ce dont vous avez besoin

\n

GraphQL est un langage de requête développé par Facebook. Le client décrit lui-même la structure de la réponse. Une seule requête — une seule réponse, sans excès ni manque de données.

\n

Comment fonctionne GraphQL en PHP ?

\n

Côté serveur : la bibliothèque webonyx/graphql-php (installation : composer require webonyx/graphql-php). Côté client — une simple requête HTTP POST avec un corps JSON.

\n

Exemple de requête GraphQL depuis PHP

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client(['base_uri' => 'https://countries.trevorblades.com/']);\n\n$query = '\nquery GetCountry {\n    country(code: "RU") {\n        name\n        capital\n        currency\n        languages {\n            name\n        }\n    }\n}';\n\n$response = $client->post('', [\n    'json' => ['query' => $query]\n]);\n\n$data = json_decode($response->getBody(), true);\necho "Pays : " . $data['data']['country']['name'] . PHP_EOL;\necho "Capitale : " . $data['data']['country']['capital'] . PHP_EOL;\necho "Monnaie : " . $data['data']['country']['currency'] . PHP_EOL;\necho "Langues : ";\nforeach ($data['data']['country']['languages'] as $lang) {\n    echo $lang['name'] . " ";\n}\n?>

                
                

Blogs

Book Recommendations