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-моменты. Главный совет: проверяй все поля, миграции и резолверы, иначе клиент будет орать «что за чёрт?».
0 комментариев