GraphQL en PHP: bibliotecas webonyx/graphql-php y Lighthouse para crear API

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca GraphQL PHP: webonyx/graphql-php y Lighthouse



GraphQL es un lenguaje de consulta para API que permite a los clientes solicitar solo los datos necesarios. En el ecosistema PHP, la biblioteca principal para implementar GraphQL es webonyx/graphql-php. Proporciona un conjunto completo de herramientas para crear esquemas, tipos y resolutores. Para el framework Laravel, existe el paquete Lighthouse, que amplía las capacidades de graphql-php y simplifica el desarrollo.



Instalación de webonyx/graphql-php

La instalación se realiza a través de Composer:

composer require webonyx/graphql-php


Creación de esquemas y tipos

La base de GraphQL es el esquema, que define los tipos de datos y sus relaciones. Veamos un ejemplo de creación de un esquema simple para obtener una lista de usuarios.



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

// Definimos el tipo User$userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ]]);

// Definimos el tipo Query (tipo raíz para consultas)$queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function ($root, $args) { // Datos de ejemplo - en un proyecto real aquí iría una consulta a la BD $users = [ 1 => ['id' => 1, 'name' => 'Iván', 'email' => 'ivan@example.com'], 2 => ['id' => 2, 'name' => 'María', 'email' => 'maria@example.com'], ]; return $users[$args['id']] ?? null; } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return [ ['id' => 1, 'name' => 'Iván', 'email' => 'ivan@example.com'], ['id' => 2, 'name' => 'María', 'email' => 'maria@example.com'], ]; } ] ]]);

// Creamos el esquema$schema = new Schema([ 'query' => $queryType]);

// Ejecutamos la consulta$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);


Trabajo con mutaciones

Además de las consultas (Query), GraphQL admite mutaciones (Mutation) para modificar datos. Ejemplo de creación de una mutación para agregar un usuario:



<?php// Definimos el tipo de mutación$mutationType = new ObjectType([    'name' => 'Mutation',    'fields' => [        'addUser' => [            'type' => $userType,            'args' => [                'name' => Type::nonNull(Type::string()),                'email' => Type::nonNull(Type::string())            ],            'resolve' => function ($root, $args) {                // Aquí debería ir el código para guardar en la BD                return [                    'id' => 3,                    'name' => $args['name'],                    'email' => $args['email']                ];            }        ]    ]]);

// Actualizamos el esquema$schema = new Schema([ 'query' => $queryType, 'mutation' => $mutationType]);


Uso de Lighthouse para Laravel

Si trabajas con Laravel, se recomienda usar Lighthouse. Automatiza la creación del esquema basado en modelos Eloquent y proporciona

Recommendations