Graphene:用 Python 写 GraphQL 的简洁方案

GraphQL 这几年风头很盛,但 Python 生态里要把 GraphQL 用起来,选择一个趁手的库还是挺重要的。Graphene 这个项目目前在 GitHub 上拿了 8,241 个 Star,算是 Python GraphQL 工具里数得着的选择。

正文顶部截图

定位很直接:把 GraphQL 开发变简单

Graphene 的核心思路就是降低 Python 开发者接入 GraphQL 的门槛。它封装了一套声明式的 API,让你用类定义的方式就能构建出完整的 GraphQL schema,不必手动去拼字符串或者写大量模板代码。

几个值得说的特点:

  • 易用性:用 Python 类来定义类型和查询,写法跟写普通类差不多
  • Relay 支持:内置了 Relay 的节点、连接等规范实现,做分页和全局 ID 不需要自己从零写
  • 数据源无关:SQLAlchemy、Django ORM、MongoDB、甚至自定义 Python 对象,都能接进去

README区域截图

框架集成做得比较全

Graphene 不是单打独斗的类型,它围绕主库做了一整套生态:

集成方向 对应包
SQLAlchemy graphene-sqlalchemy
MongoDB graphene-mongo
Django graphene-django
Apollo Federation graphene-federation

如果你已经在用这些框架,接入成本会低很多。而且 Graphene 本身符合 GraphQL 规范,前端用 Relay、Apollo Client 这些主流客户端都能正常对接。

上手门槛确实低

安装就是一行 pip:

pip install "graphene>=3.1"

代码写起来也很直观,定义一个查询类型、一个字段、一个解析函数,就能跑起来:

import graphene

class Query(graphene.ObjectType):
    hello = graphene.String(description='A typical hello world')

    def resolve_hello(self, info):
        return 'World'

schema = graphene.Schema(query=Query)

查询时直接调用 schema.execute(),拿到结果。这种简洁度在 Python 生态里确实算不错的。

适合什么场景

如果你正在用 Python 做后端服务,前端需要灵活的数据查询能力,Graphene 可以帮你省去不少 GraphQL 的底层工作。特别是有复杂数据关系、需要做分页或聚合查询的项目,Relay 集成能省不少时间。

对于已经深度使用 Django 或 SQLAlchemy 的项目,它的集成包能让现有模型快速暴露成 GraphQL 接口,迁移成本相对低。

这个项目维护时间也比较长了,社区有一定的积累,文档和测试体系都算完整。如果你正在选型 Python 的 GraphQL 方案,Graphene 值得花点时间看看。

的积累,文档和测试体系都算完整。如果你正在选型 Python 的 GraphQL 方案,Graphene 值得花点时间看看。

更多推荐