本文目录导读:

- webonyx/graphql-php(最推荐)
- Lighthouse(Laravel专属)
- GraphQLite(注解驱动)
- Overblog/GraphQLBundle(Symfony专用)
- PHP GraphQL Client(客户端)
- 选择建议
- 实战示例(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提升效率。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播