Strawberry GraphQL:用 Python 装饰器写 GraphQL 模式
文章目录Strawberry GraphQL用 Python 装饰器写 GraphQL 模式1、 这玩意儿是干嘛的2、 基本用法3、 类型检查与框架集成4、 适合哪些人用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、 基本用法安装命令行工具pipinstallstrawberry-graphql[cli]写个app.pyimportstrawberrystrawberry.typeclassUser:name:strage:intstrawberry.typeclassQuery:strawberry.fielddefuser(self)-User:returnUser(namePatrick,age100)schemastrawberry.Schema(queryQuery)代码里User是一个普通 dataclass加了strawberry.type就变成了 GraphQL type。Query类里的user方法加了strawberry.field就变成了 query 字段。启动 dev serverstrawberry 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 即可fromstrawberry.django.viewsimportGraphQLViewfrom.schemaimportschema urlpatterns[path(graphql,GraphQLView.as_view(schemaschema)),]4、 适合哪些人用用 Python 写后端、想尝试 GraphQL 的开发者已经在用 dataclass 做数据建模、不想重复定义 schema 的人Django 项目需要 GraphQL 端点的团队对类型安全有要求、希望静态检查覆盖到 GraphQL 层的项目厌倦手写 schema 文件、想要代码即配置的工程团队ango 项目需要 GraphQL 端点的团队对类型安全有要求、希望静态检查覆盖到 GraphQL 层的项目厌倦手写 schema 文件、想要代码即配置的工程团队