API GraphQL avec PHP : tutoriel pas à pas

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 : Pourquoi GraphQL et PHP forment une excellente paire

Dans le monde du développement web, l'API REST a longtemps été le standard de facto. Cependant, avec la complexité croissante des applications et l'émergence des clients mobiles, les inconvénients de REST sont devenus évidents : excès ou manque de données, multiples points de terminaison, versioning complexe. GraphQL, développé par Facebook, résout ces problèmes en permettant au client de demander uniquement les données dont il a besoin et de les obtenir en une seule requête.

PHP, malgré son côté « vieille école », reste un langage puissant pour créer la logique serveur. Grâce à des bibliothèques modernes comme webonyx/graphql-php, implémenter une API GraphQL en PHP est devenu simple et efficace. Dans ce tutoriel, nous allons créer pas à pas un serveur GraphQL complet capable de traiter des requêtes, des mutations et de fonctionner avec une base de données.

Nous utiliserons PHP 8.0+, Composer pour la gestion des dépendances et le serveur PHP intégré pour les tests locaux. À la fin de cet article, vous serez en mesure de déployer votre propre API et de l'intégrer avec n'importe quel frontend.

1. Installation et configuration de l'environnement

Avant d'écrire du code, il est nécessaire de préparer le projet. Assurez-vous d'avoir PHP 8.0+ et Composer installés. Créez un nouveau dossier pour le projet et placez-vous dedans :

mkdir graphql-php-tutorial
cd graphql-php-tutorial

Installez maintenant la bibliothèque principale webonyx/graphql-php avec Composer :

composer require webonyx/graphql-php

Pour travailler avec la base de données, nous utiliserons PDO, qui est intégré à PHP. Installez également une bibliothèque pour l'analyse pratique des requêtes :

composer require graphql-php/graphql-php

Créez le fichier index.php — ce sera le point d'entrée de notre application. Configurez l'autoloading de Composer et la structure de base :

<?php
require_once __DIR__ . '/vendor/autoload.php';

use GraphQL\\GraphQL;
use GraphQL\\Type\\Schema;
use GraphQL\\Type\\Definition\\ObjectType;
use GraphQL\\Type\\Definition\\Type;

// Notre logique sera ici

Créez également un fichier schema.graphql pour stocker le schéma au format texte (optionnel, mais pratique pour les grands projets).

2. Définition du schéma et des types de données

Le cœur de toute API GraphQL est le schéma. Il décrit quelles données sont disponibles et comment y accéder. Dans notre exemple, nous allons créer un modèle simple d'utilisateur (User) et d'article (Post).

Commençons par définir les types. Dans le fichier index.php, ajoutez les classes suivantes :

// Type User
$userType = new ObjectType([
    'name' => 'User',
    'fields' => [
        'id' => Type::int(),
        'name' => Type::string(),
        'email' => Type::string(),
        'posts' => [
            'type' => Type::listOf($postType),
            'resolve' => function ($user) use ($db) {
                // Fonction résolveur pour charger les articles de l'utilisateur
                $stmt = $db->prepare('SELECT * FROM posts WHERE user_id = :id');
                $stmt->execute([':id' => $user['id']]);
                return $stmt->fetchAll(PDO::FETCH_ASSOC);
            }
        ]
    ]
]);

// Type Post
$postType = new ObjectType([
    'name' => 'Post',
    'fields' => [
        'id' => Type::int(),
        'title' => Type::string(),
        'content' => Type::string(),
        'author' => [
            'type' => $userType,
            'resolve' => function ($post) use ($db) {
                $stmt = $db->prepare('SELECT * FROM users WHERE id = :id');
                $stmt->execute([':id' => $post['user_id']]);
                return $stmt->fetch(PDO::FETCH_ASSOC);
            }
        ]
    ]
]);

Notez les résolveurs — ce sont des fonctions qui déterminent comment obtenir les données pour chaque champ. Dans l'exemple ci-dessus, nous utilisons PDO pour les requêtes à la base de données.

Créons mainten

Blogs

Book Recommendations