PHP GraphQL库哪个好用

wen PHP项目 2

本文目录导读:

PHP GraphQL库哪个好用

  1. webonyx/graphql-php(最推荐)
  2. Lighthouse(Laravel专属)
  3. GraphQLite(注解驱动)
  4. Overblog/GraphQLBundle(Symfony专用)
  5. PHP GraphQL Client(客户端)
  6. 选择建议
  7. 实战示例(webonyx)

在选择PHP的GraphQL库时,主要看你的项目需求和框架环境,以下是目前最主流的几个选择:

webonyx/graphql-php(最推荐)

官方参考实现,Star最多,生态最完善。

优点:

  • 完全遵循GraphQL规范
  • 文档清晰完整,学习资源多
  • 支持Schema定义、解析器、类型系统
  • 性能较好,内存优化到位
  • 社区活跃,更新频繁

缺点:

  • 需要手写Schema定义(学习曲线)
  • 代码量相对较多

适用场景: 大多数项目,特别是需要完全控制Schema和解析逻辑的场景。

use GraphQL\GraphQL;
use GraphQL\Type\Schema;
use GraphQL\Type\Definition\ObjectType;
$queryType = new ObjectType([
    'name' => 'Query',
    'fields' => [
        'hello' => [
            'type' => Type::string(),
            'resolve' => fn() => 'Hello World!'
        ]
    ]
]);
$schema = new Schema(['query' => $queryType]);
$result = GraphQL::executeQuery($schema, $queryString);

Lighthouse(Laravel专属)

基于graphql-php的Laravel扩展包,声明式Schema

优点:

  • 使用注释/注解定义Schema,代码量少
  • 与Laravel Eloquent深度集成
  • 自动生成CRUD操作
  • 内置缓存、验证、授权

缺点:

  • 仅限Laravel框架
  • 过度封装可能限制灵活性
# 在Model中使用注解
/**
 * @property string $name
 * @property string $email
 */
class User extends Model
{
    // 无需额外代码
}
# 自动生成Schema
type User {
    id: ID!
    name: String!
    email: String!
}

GraphQLite(注解驱动)

同样基于graphql-php,但不依赖框架

优点:

  • 使用PHP8注解
  • 自动生成复杂的Schema
  • 类型安全,IDE友好

缺点:

  • 文档较少
  • 社区规模小
use TheCodingMachine\GraphQLite\Annotations\Query;
class UserController
{
    #[Query]
    public function user(int $id): User
    {
        return User::find($id);
    }
}

Overblog/GraphQLBundle(Symfony专用)

基于graphql-php的Symfony Bundle。

优点:

  • 与Symfony全家桶集成
  • 自动生成Schema
  • 缓存机制完善

缺点:

  • 仅限Symfony
  • 配置相对复杂

PHP GraphQL Client(客户端)

如果你的需求是调用GraphQL API(客户端):

use GraphQL\Client;
use GraphQL\Query;
$client = new Client('https://api.example.com/graphql');
$query = new Query('user', ['id' => 1], 'name email');
$result = $client->runQuery($query);

选择建议

场景 推荐
Laravel项目 Lighthouse
Symfony项目 Overblog
无框架/微服务 webonyx
追求代码简洁 GraphQLite
完全控制 webonyx

实战示例(webonyx)

// 定义类型
$userType = new ObjectType([
    'name' => 'User',
    'fields' => [
        'id' => Type::nonNull(Type::id()),
        'name' => Type::nonNull(Type::string()),
        'email' => Type::string(),
    ]
]);
// 定义查询
$queryType = new ObjectType([
    'name' => 'Query',
    'fields' => [
        'user' => [
            'type' => $userType,
            'args' => ['id' => Type::nonNull(Type::id())],
            'resolve' => function($root, $args) {
                return User::find($args['id']);
            }
        ]
    ]
]);
// 执行
$schema = new Schema(['query' => $queryType]);
$result = GraphQL::executeQuery($schema, $query, $variables);
echo json_encode($result->toArray());

最推荐 webonyx/graphql-php,它是基石,其他库多数基于它,如果开发Laravel,建议用Lighthouse提升效率。

抱歉,评论功能暂时关闭!