使用PHP构建GraphQL API:逐步实践教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

GraphQL API with PHP: Step-by-Step Practical Tutorial



GraphQL 是一种API查询语言,允许客户端只接收他们实际需要的数据。与每个端点返回固定结构的REST不同,GraphQL提供了灵活性和效率。在本教程中,我们将从头开始用PHP创建一个完整的GraphQL API——从库安装到处理查询和变更。



为什么GraphQL和PHP是绝佳组合?

PHP仍然是服务器端开发中最流行的语言之一。使用webonyx/graphql-php库,你可以轻松地将GraphQL集成到任何项目中——从简单的博客到复杂的CRM系统。主要优势:

  • 查询灵活性 —— 客户端决定接收哪些字段。
  • 单一入口点 —— 使用一个/graphql代替多个端点。
  • 强类型 —— 模式定义了所有类型和关系。
  • 前端便利性 —— React、Vue等框架可以轻松与GraphQL配合使用。


在PHP中逐步实现GraphQL API



1. 环境设置与安装

首先,我们创建一个新项目并通过Composer安装主库:

composer require webonyx/graphql-php

我们还需要一个兼容PSR-7的HTTP处理器。我们将使用guzzlehttp/psr7和nyholm/psr7-server:

composer require guzzlehttp/psr7 nyholm/psr7-server

让我们创建基本的文件夹结构:

project/├── src/│   ├── Schema/│   ├── Resolvers/│   └── Types/├── public/│   └── index.php├── vendor/└── composer.json


2. 定义GraphQL模式

模式是GraphQL API的核心。它描述了数据类型和可用的操作。让我们创建文件src/Schema/Schema.php:

<?phpnamespace App\\Schema;

use GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;use GraphQL\\Type\\Schema as GraphQLSchema;

class Schema{ public static function build(): GraphQLSchema { // "User" 类型 $userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ] ]);

// "Query" 类型 —— 根查询 $queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function ($root, $args) { // 解析器将在此处 return UserResolver::getUser($args['id']); } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return UserResolver::getAllUsers(); } ] ] ]);

// "Mutation" 类型 —— 根变更 $mutationType = new ObjectType([ 'name' => 'Mutation', 'fields' => [ 'createUser' => [ 'type' => $userType, 'args' => [ 'name' => Type::nonNull(Type::string()), 'email' => Type::nonNull(Type::string()) ], 'resolve' => function ($root, $args) { return UserResolver::createUser($args['name'], $args['email']); } ] ] ]);

return new GraphQLSchema([

博客

书籍推荐