yakovenko/laravel-lighthouse-graphql-multi-schema

一个为 Lighthouse GraphQL 提供多模式支持的 Laravel 扩展包。

v1.3.0 2024-09-11 11:38 UTC

This package is auto-updated.

Last update: 2024-09-11 11:41:56 UTC


README

Latest Version on Packagist Total Downloads License

yakovenko/laravel-lighthouse-graphql-multi-schema 是一个 Laravel 扩展包,为 Lighthouse GraphQL 提供多模式支持。它允许您在单个 Laravel 应用程序中管理多个 GraphQL 模式,简化开发并扩展功能。

安装

要求

  • PHP : ^8
  • Laravel : ^9.0 || ^10.0 || ^11.0
  • Nuwave Lighthouse : ^6.0

安装扩展包

您可以使用 Composer 安装此扩展包。

composer require yakovenko/laravel-lighthouse-graphql-multi-schema

发布配置

安装扩展包后,您需要通过运行以下命令发布配置文件:

php artisan lighthouse-multi-schema:publish-config

这将创建一个名为 lighthouse-multi-schema.php 的配置文件,位于 config 目录下,您可以在其中设置您的 GraphQL 模式。

配置

在 config/lighthouse-multi-schema.php 文件中,您可以定义您的模式和它们的设置。以下是一个示例配置:

return [
    'multi_schemas' => [
        'example' => [
            'route_uri'           => '/example-graphql',
            'route_name'          => 'example-graphql',
            'schema_path'         => base_path("graphql/example.graphql"),
            'schema_cache_path'   => env('LIGHTHOUSE_EXAMPLE_SCHEMA_CACHE_PATH', base_path("bootstrap/cache/example-schema.php")),
            'schema_cache_enable' => env('LIGHTHOUSE_EXAMPLE_CACHE_ENABLE', false),
            'middleware' => [
                // Always set the `Accept: application/json` header.
                Nuwave\Lighthouse\Http\Middleware\AcceptJson::class,

                // Logs in a user if they are authenticated. In contrast to Laravel's 'auth'
                // middleware, this delegates auth and permission checks to the field level.
                Nuwave\Lighthouse\Http\Middleware\AttemptAuthentication::class,

                // Apply your custom middleware here.
                // For example:
                // App\Http\Middleware\ExampleSchemaMiddleware::class,
            ]
        ],
        // Add additional schemas as needed
    ],
];

中间件支持

现在,您可以针对每个 GraphQL 模式添加特定的中间件。这允许您根据使用的模式应用不同的中间件配置。只需为每个模式指定中间件类数组中的中间件类,它们将应用于相应的路由。

CSRF 异常

将您的 GraphQL 路由添加到 CSRF 异常中。

打开 App/Http/Middleware/VerifyCsrfToken.php 文件,并将您的路由添加到 $except 数组中。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array<int, string>
     */
    protected $except = [
        'schema1-graphql',
        'schema2-graphql',
        // Add other routes as needed
    ];
}

为每个模式创建目录

将您的模式文件组织到每个模式的单独目录中。这些目录的结构以及您如何分割文件取决于您。以下是一个示例组织方式:

/graphql
├── schema.graphql
├── schema1.graphql
├── schema2.graphql
└── schema3.graphql

控制台命令示例

lighthouse:clear-cache 命令用于管理 GraphQL 模式的缓存。以下是一些可用用法:

1 - 清除所有模式缓存

要清除所有 GraphQL 模式的缓存,请运行以下命令:

php artisan lighthouse:clear-cache

此命令将删除所有缓存的模式文件,确保对模式的任何更改都会在下一次访问时反映出来。

2 - 清除特定模式的缓存

您也可以通过将 {keyYourSchema} 替换为所需的模式名称来清除任何其他模式的缓存

php artisan lighthouse:clear-cache {keyYourSchema}

示例

php artisan lighthouse:clear-cache schema1

{keyYourSchema} 替换为要针对其实施的模式的实际名称。这将仅删除该模式的缓存。

端点模式

模式 1:在 domain.local/schema1-graphql 处访问 GraphQL 模式

模式 2:在 domain.local/schema2-graphql 处访问 GraphQL 模式

模式 3:在 domain.local/schema3-graphql 处访问 GraphQL 模式

使用方法

一旦配置完毕,您就可以在应用程序中使用每个模式的定义路由。每个路由将利用其对应的 GraphQL 模式。您拥有一个多模式设置,允许无限数量的访问点,每个访问点都支持各种针对特定需求定制的突变和查询。您可以根据项目要求定义每个模式。这种灵活性允许您为应用程序的不同部分创建不同的模式,确保每个区域都可以根据需要定制查询和突变。

作者