GraphQL en PHP : bibliothèques webonyx/graphql-php et Lighthouse pour créer des API

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

Bibliothèque GraphQL PHP : webonyx/graphql-php et Lighthouse



GraphQL est un langage de requête pour les API qui permet aux clients de demander uniquement les données nécessaires. Dans l'écosystème PHP, la bibliothèque principale pour implémenter GraphQL est webonyx/graphql-php. Elle fournit un ensemble complet d'outils pour créer des schémas, des types et des résolveurs. Pour le framework Laravel, il existe le package Lighthouse, qui étend les capacités de graphql-php et simplifie le développement.



Installation de webonyx/graphql-php

L'installation se fait via Composer :

composer require webonyx/graphql-php


Création du schéma et des types

La base de GraphQL est le schéma, qui définit les types de données et leurs relations. Voici un exemple de création d'un schéma simple pour obtenir une liste d'utilisateurs.



<?phpuse GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;use GraphQL\\Type\\Schema;use GraphQL\\GraphQL;

// Définition du type User$userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ]]);

// Définition du type Query (type racine pour les requêtes)$queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function ($root, $args) { // Exemple de données - dans un projet réel, ce serait une requête à la base de données $users = [ 1 => ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'], 2 => ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com'], ]; return $users[$args['id']] ?? null; } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return [ ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'], ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com'], ]; } ] ]]);

// Création du schéma$schema = new Schema([ 'query' => $queryType]);

// Exécution de la requête$rawInput = file_get_contents('php://input');$input = json_decode($rawInput, true);$query = $input['query'];$result = GraphQL::executeQuery($schema, $query);$output = $result->toArray();

header('Content-Type: application/json');echo json_encode($output);


Travailler avec les mutations

En plus des requêtes (Query), GraphQL prend en charge les mutations (Mutation) pour modifier les données. Exemple de création d'une mutation pour ajouter un utilisateur :



<?php// Définition du type Mutation$mutationType = new ObjectType([    'name' => 'Mutation',    'fields' => [        'addUser' => [            'type' => $userType,            'args' => [                'name' => Type::nonNull(Type::string()),                'email' => Type::nonNull(Type::string())            ],            'resolve' => function ($root, $args) {                // Ici devrait se trouver le code pour sauvegarder dans la base de données                return [                    'id' => 3,                    'name' => $args['name'],                    'email' => $args['email']                ];            }        ]    ]]);

// Mise à jour du schéma$schema = new Schema([ 'query' => $queryType, 'mutation' => $mutationType]);


Utilisation de Lighthouse pour Laravel

Si vous travaillez avec Laravel, il est recommandé d'utiliser Lighthouse. Il automatise la création de schémas basés sur les modèles Eloquent et fournit

Recommendations