主页/PHP笔记/PHP问答/框架Laravel/如何在 Laravel 中实现 GraphQL

如何在 Laravel 中实现 GraphQL

Bug编译狮

Bug编译狮

在 Laravel 中实现 GraphQL 通常涉及以下几个步骤:

  1. 安装必要的包: 首先,你需要安装 graphql/laravel 包和 nuwave/lighthouse 包。

    composer require nuwave/lighthouse graphql/laravel
  2. 配置 Lighthouse: 运行以下命令来生成 Lighthouse 的配置文件。

    php artisan lighthouse:install

    这将创建一些必要的文件和目录,如 app/GraphQL/Schemaapp/GraphQL/Mutations 等。

  3. 定义 GraphQL Schema: 在 app/GraphQL/Schema 目录下,你可以创建一个或多个 .graphql 文件来定义你的 GraphQL 图形结构。例如,创建一个名为 User.graphql 的文件:

    type Query {
     user(id: ID!): User!
    }
    
    type Mutation {
     createUser(name: String!, email: String!): User!
    }
    
    type User {
     id: ID!
     name: String!
     email: String!
    }
  4. 创建 GraphQL Resolver: 在 app/GraphQL/Mutations 目录下,你可以创建一个或多个 PHP 类来处理这些查询和 mutation。例如,创建一个名为 CreateUserResolver.php 的类:

    namespace AppGraphQLMutations;
    
    use GraphQLTypeDefinitionType;
    use IlluminateSupportFacadesAuth;
    use GraphQLTypeSchemaBuilder;
    
    class CreateUserResolver
    {
       public function __invoke(SchemaBuilder $schema, array $args)
       {
           $user = Auth::user()->create([
               'name' => $args['name'],
               'email' => $args['email'],
           ]);
    
           return [
               'id' => $user->id,
               'name' => $user->name,
               'email' => $user->email,
           ];
       }
    }
  5. 注册 Resolver: 在 config/lighthouse.php 文件中,注册你的 resolver。

    'resolvers' => [
       'Query.user' => AppGraphQLMutationsUserResolver::class,
       'Mutation.createUser' => AppGraphQLMutationsUserResolver::class,
    ],
  6. 配置路由: 在 routes/web.phproutes/api.php 文件中,配置你的路由以暴露 GraphQL API。

    use GraphQLHttpLaravelHttpController as GraphQLController;
    
    Route::get('/graphql', GraphQLController::class);
  7. 测试 GraphQL API: 使用工具如 Postman 或 cURL 来测试你的 GraphQL API。例如,使用 cURL 发送一个 POST 请求到 /graphql 路由,并传递一个查询:

    curl -X POST http://localhost/graphql 
       -H "Content-Type: application/json" 
       -d '{"query": "{ user(id: 1) { id name email }}"}'

通过以上步骤,你就可以在 Laravel 中成功实现 GraphQL 并提供 RESTful 接口。

黑板Bug讲师

黑板Bug讲师

概览

将GraphQL集成到Laravel项目中可以为您的web应用程序带来革命性的变化。GraphQL提供了与传统REST API相比更高效和强大的替代方案,允许客户端仅查询他们所需的数据。在本指南中,我们将向您介绍如何将GraphQL添加到Laravel项目中。

GraphQL是一种用于构建可扩展API的系统,它允许客户端以问题的形式向服务器请求数据,而不是像RESTful API那样提供完整的资源列表。GraphQL的核心思想是通过定义一组明确的问题来获取所需的数据,这使得开发者能够更精确地控制他们从服务器上获取的信息。GraphQL通常与JavaScript编写的前端框架(如React和Vue)结合使用,以实现动态、高效的用户界面。

GraphQL 是一种开源的数据查询和操作语言,以及执行查询的运行时。它提供了更描述性和高效的方式来与数据进行交互。

在开始之前,请确保您的系统上已经安装了Laravel。如果您还没有安装,您可以参考以下教程之一:

如何在Ubuntu上安装和配置Laravel(使用Nginx)

如何在DigitalOcean上使用Laravel Forge部署Laravel项目

如何在Windows和Mac上安装Laravel

如何使用Docker Compose设置Laravel环境

步骤说明

步骤1:安装GraphQL Laravel扩展包

composer require rebing/graphql-laravel

这个命令会安装由Rebing开发的GraphQL Laravel包,该包提供了许多预设功能,包括文件上传支持、错误处理以及批量查询等其他特性。

步骤 2:发布配置文件

php artisan vendor:publish --provider="RebingGraphQLGraphQLServiceProvider"

该命令将会发布 GraphQL 配置文件到config/graphql.php目录。您可以在配置文件中调整设置,例如声明模式、安全性等。

步骤3:定义你的类型

在GraphQL中,类型至关重要,因为它们定义了你可以查询的数据的形状。让我们为我们的GraphQL设置定义一个简单的类型。

php artisan make:graphql:type UserType

一旦创建完成,编辑位于的生成类型。app/GraphQL/Types/UserType.php

<?php

namespace AppGraphQLTypes;

use GraphQLTypeDefsGraphQLType;
use GraphQLTypeDefinitionType;
use AppModelsUser;

class UserType extends GraphQLType {
  protected $attributes = [
    'name' => 'User',
    'description' => 'A user',
    'model' => User::class,
  ];

  public function fields(): array {
    return [
      'id' => [
        'type' => Type::nonNull(Type::int()),
        'description' => 'The id of the user',
      ],
      // Other fields like 'name', 'email', etc.
    ];
  }
}

步骤4:定义你的查询

查询允许你在GraphQL中检索数据。让我们创建一个查询来获取用户。

php artisan make:graphql:query UsersQuery

我们需要填充我们的app/GraphQL/Queries/UsersQuery.php你好!有什么我可以帮助您的吗?

<?php

namespace AppGraphQLQueries;

use GraphQLTypeDefsGraphQLType;
use GraphQLTypeDefinitionType;
use RebingGraphQLSupportQuery;

use AppModelsUser;

...

步骤 5:设置 GraphQL 模型

现在你需要为你的查询、更新和类型定义一个模式(schema)。

编辑config/graphql.php定义一个新的架构:

'schemas' => [
  'default' => [
    'query' => [
      'users' => AppGraphQLQueriesUsersQuery::class,
    ],
    // 'mutation' => [
    // ],
    // 'middleware' => [],
    // 'method' => ['get', 'post'],
  ],
],

步骤 6:创建 GraphQL 接口

编辑。routes/web.php添加路由到GraphQL端点的文件。

Route::post('/graphql', 'GraphQLController@query');

GraphQL控制器将成为所有GraphQL查询的入口点。

步骤 7:测试您的 GraphQL 配置

现在可以测试GraphQL API了。你可以使用工具如GraphiQL或Postman来查询你的端点。这里有一个示例查询:

{
  users {
    id
    name
  }
}

该查询将返回所有用户及其ID和姓名。

结论。

在本教程中,我们已经介绍了如何将GraphQL集成到Laravel项目中的基本步骤。GraphQL可以为您的应用程序提供一个高效、强大的查询和操作数据的接口。虽然我们在高阶步骤上进行了简要介绍,但GraphQL还提供了许多其他功能,包括修改数据(用于数据操纵)、实时更新(通过订阅)以及高级查询功能。

按照这个指南,你现在已经建立了一个坚实的基础,并可以探索GraphQL丰富的功能。请始终查阅GraphQL的官方文档以及您正在使用的Laravel包以获取更详细的信息。

长工码奴1523

长工码奴1523

GraphQL 是一种轻量级的 API 客户端语言,用于构建和查询数据。Laravel 5.8 及更高版本支持 GraphQL。

以下是使用 Laravel 和 GraphQL 实现基本查询的一个简单示例:

  1. 首先,你需要安装 Laravel 的 GraphQL 扩展。你可以通过 Composer 安装它:

    composer require "laravel/framework>=5.8"
  2. 然后,在项目的 app/Http/Kernel.php 文件中启用 GraphQL。这将允许客户端发送 GraphQL 查询到服务器。

    protected $routeMiddleware = [
       // ...
       'graphql' => AppHttpMiddlewareGraphQL::class,
    ];
  3. 创建一个新的控制器来处理 GraphQL 请求。例如,创建一个名为 GraphQLController.php 的文件,并添加以下代码:

    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    use GraphQL;
    use GraphQLTypeDefinitionType;
    use GraphQLErrorUserError;
    use GraphQLSupportFacadesGraphQl;
    use AppModelsUser;
    
    class GraphQLController extends Controller
    {
       public function __construct()
       {
           parent::__construct();
           GraphQl::register($this);
       }
    
       /**
        * @param Request $request
        * @return array
        */
       public function graphql(Request $request)
       {
           try {
               return GraphQl::resolve($this, 'handle')->execute($request->query());
           } catch (Exception $e) {
               throw new UserError('Something went wrong.');
           }
       }
    
       private function handle($data)
       {
           if ($data['name'] == 'admin') {
               return User::where('name', 'admin')->firstOrFail();
           } else {
               return User::all()->sortByDesc('id');
           }
       }
    }
  4. config/graphql.php 文件中定义 GraphQL 类型。

    'types' => [
       'User' => [
           'type' => Type::nonNull(Type::string()),
           'fields' => [
               'id' => [
                   'type' => Type::integer(),
                   'description' => 'The user's ID.',
               ],
               'name' => [
                   'type' => Type::string(),
                   'description' => 'The user's name.',
               ],
           ],
       ],
    ]
  5. 最后,启动 Laravel 应用并运行 GraphQL 测试。

    php artisan serve --host=0.0.0.0

现在,你可以在浏览器中输入 http://localhost:8000/graphql 来测试 GraphQL API。你可以使用类似于这样的查询来测试:

{
  "query": "{ users { id name } }"
}

这个例子展示了如何使用 Laravel 的 GraphQL 扩展来实现基本的 GraphQL 查询功能。如果你需要进一步的定制或者扩展,请参考官方文档:https://graphql.org/learn/laravel/