API GraphQL avec PHP : tutoriel pratique étape par étape

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 à GraphQL avec PHP : pourquoi l'essayer

\n\n

GraphQL est un langage de requêtes moderne pour les API, développé par Facebook. Contrairement à REST, où chaque endpoint renvoie une structure de données fixe, GraphQL permet au client de demander uniquement les champs dont il a besoin. Cela réduit le volume de données transmises et simplifie le développement d'applications complexes.

\n\n

Dans ce tutoriel, nous allons créer une API GraphQL complète en PHP en utilisant la bibliothèque webonyx/graphql-php. Vous apprendrez à définir un schéma, écrire des résolveurs, traiter les requêtes et mutations, et tester l'API via GraphiQL.

\n\n

Il est supposé que vous avez installé PHP 8.0+ et Composer. Si ce n'est pas le cas, commencez par les installer.

\n\n

Installation et configuration du projet

\n\n

Étape 1 : Création du projet et installation des dépendances

\n\n

Créez un nouveau répertoire pour le projet et initialisez Composer :

\n\n
mkdir graphql-php-tutorial\ncd graphql-php-tutorial\ncomposer init
\n\n

Installez la bibliothèque webonyx/graphql-php :

\n\n
composer require webonyx/graphql-php
\n\n

Installez également nikic/fast-route pour un routage simple (optionnel mais pratique) :

\n\n
composer require nikic/fast-route
\n\n

Étape 2 : Structure du projet

\n\n

Créez la structure de dossiers suivante :

\n\n
graphql-php-tutorial/\n├── src/\n│   ├── Schema/\n│   │   └── schema.php\n│   ├── Resolvers/\n│   │   ├── QueryResolver.php\n│   │   └── MutationResolver.php\n│   └── Data/\n│       └── Database.php\n├── public/\n│   └── index.php\n├── vendor/\n└── composer.json
\n\n

Création du schéma GraphQL

\n\n

Étape 3 : Définition des types et du schéma

\n\n

Créons un modèle de données simple : utilisateur (User) et publication (Post). Ouvrez src/Schema/schema.php et ajoutez le code suivant :

\n\n
<?php\n\nnamespace App\\Schema;\n\nuse GraphQL\\Type\\Definition\\ObjectType;\nuse GraphQL\\Type\\Definition\\Type;\nuse GraphQL\\Type\\Schema as GraphQLSchema;\n\nclass Schema\n{\n    public static function build(): GraphQLSchema\n    {\n        // Type User\n        $userType = new ObjectType([\n            'name' => 'User',\n            'fields' => [\n                'id' => Type::int(),\n                'name' => Type::string(),\n                'email' => Type::string(),\n                'posts' => [\n                    'type' => Type::listOf(function() use (&$postType) {\n                        return $postType;\n                    }),\n                    'resolve' => function($user) {\n                        return \\App\\Resolvers\\QueryResolver::getPostsByUser($user['id']);\n                    }\n                ]\n            ]\n        ]);\n\n        // Type Post\n        $postType = new ObjectType([\n            'name' => 'Post',\n            'fields' => [\n                'id' => Type::int(),\n                'title' => Type::string(),\n                'content' => Type::string(),\n                'author' => [\n                    'type' => $userType,\n                    'resolve' => function($post) {\n                        return \\App\\Resolvers\\QueryResolver::getUserById($post['author_id']);\n                    }\n                ]\n            ]\n        ]);\n\n        // Type racine Query\n        $queryType = new ObjectType([\n            'name' => 'Query',\n            'fields' => [\n                'users' => [\n                    'type' => Type::listOf($userType),\n                    'resolve' => function() {\n                        return \\App\\Resolvers\\QueryResolver::getAllUsers();\n                    }\n                ],\n                'user' => [\n                    'type' => $userType,\n                    'args' => [\n                        'id' => Type::nonNull(Type::int())\n                    ]                

Blogs

Book Recommendations