graphql-core:Python 的 GraphQL 官方实现

graphql-core 在 GitHub 上已经拿到 528 Star。

这是 GraphQL.js 的 Python 移植版,由 graphql-python 组织维护。如果你需要在 Python 项目里搭 GraphQL 服务,这个库就是底层根基。

正文顶部截图

1、 这玩意儿是干嘛的

graphql-core 只做一件事:在 Python 里完整实现 GraphQL 规范。

它是 Facebook 官方 GraphQL.js 的 Python 3.7+ 移植版,代码层面尽量贴近原版,同时保持 Pythonic 的 API 风格。库里有完整的类型系统,支持构建 Schema、执行查询、校验语法,同步异步都能跑。

测试套件覆盖了 2600 多个单元测试,覆盖率 100%,和 GraphQL.js 的测试用例一一对应。

2、 为什么要用它

Python 生态里做 GraphQL 的上层框架不少,Graphene、Ariadne、Strawberry 都是大家熟悉的。这些框架的底层执行引擎,用的都是 graphql-core。

它相当于 Python GraphQL 世界的地基。直接用它,你可以从零拼出一个 GraphQL 服务;用它之上的框架,则省掉很多样板代码。

README区域截图

3、 基本用法

安装:

pip install graphql-core

定义一个 Schema:

from graphql import GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString

schema = GraphQLSchema(
    query=GraphQLObjectType(
        name='RootQueryType',
        fields={
            'hello': GraphQLField(
                GraphQLString,
                resolve=lambda obj, info: 'world')
        }))

执行查询:

from graphql import graphql_sync

result = graphql_sync(schema, '{ hello }')
print(result)

输出:

ExecutionResult(data={'hello': 'world'}, errors=None)

异步查询用 graphql() 代替 graphql_sync(),配合 async/await 写 resolver 就行。

4、 版本与兼容

当前稳定版 3.2.8 对齐 GraphQL.js 16.9.0,支持 Python 3.7 到 3.14。3.3 的 alpha 版已经跟进到 GraphQL.js 17.0.0a7,最低要求 Python 3.10。

需要留意的是,graphql-core 没有采用 SemVer。GraphQL.js 的主版本变动会映射到它的次版本,所以次版本升级可能带 breaking change。建议依赖里写 ~= 3.2.0 这样的版本约束。

5、 适合哪些人用

  • 要在 Python 项目里直接搭 GraphQL 服务的后端开发者
  • 正在用 Graphene、Ariadne 或 Strawberry,想了解底层执行原理的人
  • 需要完整类型提示和严格测试覆盖的生产环境

发者

  • 正在用 Graphene、Ariadne 或 Strawberry,想了解底层执行原理的人
  • 需要完整类型提示和严格测试覆盖的生产环境

更多推荐