Strawberry GraphQL:用 Python 装饰器写 GraphQL 模式
Strawberry GraphQL:用 Python 装饰器写 GraphQL 模式
Strawberry GraphQL 在 GitHub 上已有 4,664 Star。
这是一个基于 Python dataclass 的 GraphQL 库,用装饰器语法把类定义直接映射成 GraphQL schema。不需要写额外的 schema 文件,在 Python 代码里加几个注解就能跑起来。
Python 生态里做 GraphQL 的库不少,Strawberry 的思路是把类型系统完全交给 Python 原生的注解机制。你写的 dataclass 就是 GraphQL 的 type,类方法就是 query 或 mutation 的 resolver。

1、 这玩意儿是干嘛的
GraphQL 的优势是客户端能精确描述要什么数据,服务端按需返回。但传统做法需要手写 schema、resolver、类型定义,三层文件来回切。类型改了,三处都要改,漏一处就报错。
Strawberry 把这三层压缩成一层。用 @strawberry.type 装饰一个 dataclass,字段类型和 resolver 都写在一个类里。Python 的类型注解直接变成 GraphQL 的类型系统。改一处,schema 和 resolver 同步更新。
这个设计对习惯了 Python 类型注解的开发者很友好,学习成本主要落在 GraphQL 概念本身,而不是库的使用方式。
2、 基本用法
安装命令行工具:
pip install "strawberry-graphql[cli]"
写个 app.py:
import strawberry
@strawberry.type
class User:
name: str
age: int
@strawberry.type
class Query:
@strawberry.field
def user(self) -> User:
return User(name="Patrick", age=100)
schema = strawberry.Schema(query=Query)
代码里 User 是一个普通 dataclass,加了 @strawberry.type 就变成了 GraphQL type。Query 类里的 user 方法加了 @strawberry.field,就变成了 query 字段。
启动 dev server:
strawberry dev app
打开 http://0.0.0.0:8000/graphql 就能在 GraphiQL 里测试 API。

3、 类型检查与框架集成
Strawberry 自带 mypy 插件,在 mypy.ini 里加一行配置就能做静态类型检查:
[mypy]
plugins = strawberry.ext.mypy_plugin
这意味着你的 GraphQL schema 在写代码阶段就能被类型检查器扫描到。字段类型不对、resolver 返回值不匹配,都能在 CI 阶段抓出来。
Django 项目也能直接接入。先在 INSTALLED_APPS 里加 strawberry.django,然后在 urls.py 里挂一个 GraphQLView,指定 schema 即可:
from strawberry.django.views import GraphQLView
from .schema import schema
urlpatterns = [
path("graphql", GraphQLView.as_view(schema=schema)),
]
4、 适合哪些人用
- 用 Python 写后端、想尝试 GraphQL 的开发者
- 已经在用 dataclass 做数据建模、不想重复定义 schema 的人
- Django 项目需要 GraphQL 端点的团队
- 对类型安全有要求、希望静态检查覆盖到 GraphQL 层的项目
- 厌倦手写 schema 文件、想要代码即配置的工程团队
ango 项目需要 GraphQL 端点的团队
- 对类型安全有要求、希望静态检查覆盖到 GraphQL 层的项目
- 厌倦手写 schema 文件、想要代码即配置的工程团队
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)