GraphQL — это как «собери сам свой JSON» для клиента: он сам говорит серверу, что ему прислать. Казалось бы, удобно, но на практике это превращается в цепочку резолверов и ошибок типа «а почему пусто?» или «а где поле id?». Lighthouse для Laravel упрощает работу, но не делает чудес.

Шаг 1: Установка и настройка

Composer должен быть на месте, иначе дальше не идём. Новый проект создаём так:

composer create-project --prefer-dist laravel/laravel my-graphql-api

Теперь есть базовый Laravel, без магии, зато без лишних зависимостей.

Шаг 2: Установка Lighthouse

Lighthouse — это библиотека, которая умеет GraphQL на Laravel:

composer require nuwave/lighthouse
php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider" 

После этого у тебя появятся конфиги и можно начинать писать схемы.

Шаг 3: Создание схемы GraphQL

Схема описывает, что можно запросить и какой тип данных вернётся:

php artisan lighthouse:schema

Файл schema.graphql в graphql/ — наш новый рабочий инструмент.

Шаг 4: Определяем типы и запросы

Простейший пример с пользователями:

type User {
    id: ID!
    name: String! }

type Query {
    users: [User!]! } 

Теперь GraphQL знает, какие данные отдавать.

Шаг 5: Реализация резолверов

Резолвер — это то место, где реально забираешь данные. Создаём файл app/GraphQL/Resolvers/UsersResolver.php:

<?php namespace App\GraphQL\Resolvers;

use App\Models\User;

class UsersResolver
{
    public function __invoke($rootValue, array $args, $context, $info)
    {
        return User::all();
    }
}

И связываем его в схеме:

type Query {
    users: [User!]! @resolve(class: "App\\GraphQL\\Resolvers\\UsersResolver") } 

Лайфхак: без этого GraphQL будет ругаться, а тесты ломаться.

Шаг 6: Тестирование

Запускаем сервер Laravel:

php artisan serve

Заходим на http://localhost:8000/graphql и пробуем запрос:

query {
    users {
        id
        name
    } } 

Если JSON с пользователями пришёл — всё работает. Если нет — ищи баги в резолверах или миграциях.

Заключение

GraphQL на PHP через Lighthouse — штука мощная, но не волшебная. Простые запросы — легко, сложные резолверы и связи — тут и начинаются реальные WTF-моменты. Главный совет: проверяй все поля, миграции и резолверы, иначе клиент будет орать «что за чёрт?».