
Bug编译狮
在 Laravel 中实现 GraphQL 通常涉及以下几个步骤:
-
安装必要的包: 首先,你需要安装
graphql/laravel包和nuwave/lighthouse包。composer require nuwave/lighthouse graphql/laravel -
配置 Lighthouse: 运行以下命令来生成 Lighthouse 的配置文件。
php artisan lighthouse:install这将创建一些必要的文件和目录,如
app/GraphQL/Schema、app/GraphQL/Mutations等。 -
定义 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! } -
创建 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, ]; } } -
注册 Resolver: 在
config/lighthouse.php文件中,注册你的 resolver。'resolvers' => [ 'Query.user' => AppGraphQLMutationsUserResolver::class, 'Mutation.createUser' => AppGraphQLMutationsUserResolver::class, ], -
配置路由: 在
routes/web.php或routes/api.php文件中,配置你的路由以暴露 GraphQL API。use GraphQLHttpLaravelHttpController as GraphQLController; Route::get('/graphql', GraphQLController::class); -
测试 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讲师
概览
将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
GraphQL 是一种轻量级的 API 客户端语言,用于构建和查询数据。Laravel 5.8 及更高版本支持 GraphQL。
以下是使用 Laravel 和 GraphQL 实现基本查询的一个简单示例:
-
首先,你需要安装 Laravel 的 GraphQL 扩展。你可以通过 Composer 安装它:
composer require "laravel/framework>=5.8" -
然后,在项目的
app/Http/Kernel.php文件中启用 GraphQL。这将允许客户端发送 GraphQL 查询到服务器。protected $routeMiddleware = [ // ... 'graphql' => AppHttpMiddlewareGraphQL::class, ]; -
创建一个新的控制器来处理 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'); } } } -
在
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.', ], ], ], ] -
最后,启动 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/

