GraphQL-core-next是GraphQL.js的Python版本,GraphQL.js是GraphQL的JavaScript参考实现。
项目描述
GraphQL-core-next
GraphQL-core-next是GraphQL.js([GraphQL.js](https://github.com/graphql/graphql-js))的Python 3.6+版本,GraphQL.js是Facebook创建的查询语言GraphQL的JavaScript参考实现。
GraphQL-core-next当前版本1.1.1与GraphQL.js版本14.4.0同步。API的所有部分都由当前1885个单元测试的广泛测试套件覆盖。
现在将使用新的分发名称GraphQL-core继续开发。
GraphQL-core-next 现在已更名为 GraphQL-core 3
GraphQL-core-next 作为独立的 Python 发行版已被弃用。相反,它现在以 GraphQL-core 版本 3 及更高版本的形式发布,取代了现有的 GraphQL-core 发行版。支持旧版 Python 的旧版 GraphQL-core 仍然可用。
文档
有关 GraphQL-core-next 的更详细文档可以在 graphql-core-next.readthedocs.io 找到。
GraphQL.js 的文档可以在 graphql.org/graphql-js/ 找到。
GraphQL 本身的文档可以在 graphql.org 找到。
还将有 博客文章 提供更多使用示例。
入门
GraphQL 的概述可以在 README 中找到,该 README 位于 GraphQL 规范 仓库中。概述描述了一组简单的 GraphQL 示例,这些示例作为此仓库中的 测试 存在。开始使用此仓库的好方法是与 README 和相应的测试并行进行。
安装
可以使用内置的 pip 命令从 PyPI 安装 GraphQL-core-next
python -m pip install graphql-core-next
或者,您也可以使用 pipenv 在虚拟环境中进行安装
pipenv install graphql-core-next
使用方法
GraphQL-core-next 提供了两个重要功能:构建类型模式,以及对该类型模式进行查询。
首先,构建一个映射到您的代码库的 GraphQL 类型模式
from graphql import (
GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString)
schema = GraphQLSchema(
query=GraphQLObjectType(
name='RootQueryType',
fields={
'hello': GraphQLField(
GraphQLString,
resolve=lambda obj, info: 'world')
}))
这定义了一个包含一个类型和一个字段的简单模式,该字段解析为固定值。`resolve` 函数可以返回一个值、一个协程对象或这些对象的列表。它接受两个位置参数;第一个参数提供了根或解析的父字段,第二个参数提供了一个 `GraphQLResolveInfo` 对象,该对象包含有关查询执行状态的信息,包括一个 `context` 属性,该属性包含每个请求的状态,例如身份验证信息或数据库会话。任何 GraphQL 参数都作为单独的关键字参数传递给 `resolve` 函数。
注意,在 GraphQL.js 中,解析器函数的签名略有不同,其中上下文是单独传递的,参数作为单个对象传递。另外,请注意,必须显式地将 GraphQL 字段作为 `GraphQLField` 对象传递。类似地,GraphQL 参数必须作为 `GraphQLArgument` 对象传递。
更复杂的示例包含在顶级 tests 目录中。
然后,对该类型模式进行查询的结果进行服务。
from graphql import graphql_sync
query = '{ hello }'
print(graphql_sync(schema, query))
这运行了一个查询来获取定义的一个字段,然后打印结果
ExecutionResult(data={'hello': 'world'}, errors=None)
`graphql_sync` 函数将首先确保查询在语法和语义上是有效的,然后再执行它,否则报告错误。
from graphql import graphql_sync
query = '{ boyhowdy }'
print(graphql_sync(schema, query))
由于我们查询了一个不存在的字段,我们将得到以下结果
ExecutionResult(data=None, errors=[GraphQLError(
"Cannot query field 'boyhowdy' on type 'RootQueryType'.",
locations=[SourceLocation(line=1, column=3)])])
`graphql_sync` 函数假设所有解析器都同步返回值。通过使用协程作为解析器,您也可以使用 `graphql` 函数以异步方式创建结果。
import asyncio
from graphql import (
graphql, GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString)
async def resolve_hello(obj, info):
await asyncio.sleep(3)
return 'world'
schema = GraphQLSchema(
query=GraphQLObjectType(
name='RootQueryType',
fields={
'hello': GraphQLField(
GraphQLString,
resolve=resolve_hello)
}))
async def main():
query = '{ hello }'
print('Fetching the result...')
result = await graphql(schema, query)
print(result)
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
finally:
loop.close()
目标和限制
GraphQL-core-next 尽可能地复现参考实现 GraphQL.js 的代码,并保持与 GraphQL.js 的最新开发同步。
它被创建为一个现代的替代品,由 Syrus Akbary 开发的先前工作 GraphQL-core,基于 GraphQL.js 的较旧版本,并针对较旧的 Python 版本。GraphQL-core-next 的一些部分受到了 GraphQL-core 或经过轻微修改后直接采用的启发,但大多数代码都是从零开始重新实现的,非常接近地复制了 GraphQL.js 中的最新代码,并添加了 Python 的类型提示。
GraphQL-core-next 库的设计目标是
- 使用当前库和语言版本,实现一个简单、无冗余、最先进的 GraphQL 实现
- 尽可能接近 GraphQL.js 的参考实现,同时仍然使用 Pythonic API 和代码风格
- 广泛使用 Python 类型提示,类似于 GraphQL.js 使用 Flow 的方式
- 使用 black 进行自动代码格式化
- 使用 pytest 复制 GraphQL.js 的完整 Mocha 测试套件
一些限制(大部分与设计目标一致)
- 需要 Python 3.6 或 3.7
- 不支持一些 GraphQL.js 已经弃用的方法和选项
- 仅通过 async.io 支持异步操作(不支持 GraphQL-core 中的附加执行器)
- 基准测试尚未移植到 Python
与其他库的集成和路线图
-
Graphene 是一个更高级别的 Python 构建 GraphQL API 的框架,并且已经建立了一个完整的生态系统,包括在 Graphene 之上构建的库、服务器集成和工具。这个 Graphene 生态系统的大部分也是由 Syrus Akbary 创建的,他同时将维护和未来发展交给了 GraphQL-Python 社区的成员。
Graphene 当前版本 2 使用 Graphql-core 作为核心库来完成大部分重负载。请注意,Graphene 2 与 GraphQL-core-next 不兼容。然而,Graphene 的下一个新版本 3 计划使用 GraphQL-core-next 而不是 GraphQL-core,并且 GraphQL-core-next 将被重命名为 Graphql-core 3。
-
Ariadne 是一个由 Mirumee Software 创建的 Python 库,用于使用 schema-first 方法实现 GraphQL 服务器。
Ariadne 已经使用 GraphQL-core-next 作为其 GraphQL 实现。
-
Strawberry 是由 Patrick Arminio 创建的一个新的 GraphQL 库,用于 Python 3,灵感来自 dataclasses,它也使用 GraphQL-core-next 作为基础。
变更日志
变更跟踪为 GitHub 发布。
致谢和历史
GraphQL-core-next 库
- 由 Christoph Zwerschke 创建和维护
- 使用了 Syrus Akbary 的先前工作 GraphQL-core 的想法和代码
- 是 Facebook 公司的 Lee Byron 等人开发的 GraphQL.js 的 Python 版本,现在由 GraphQL 基金会 维护
请观看 Lee Byron 在开源领导力峰会 2019 上关于 GraphQL 历史的简短演讲录音,以更好地了解 GraphQL 是如何在 Facebook 上创建的,以及为什么它被开源并移植到许多不同的编程语言。
许可证
GraphQL-core-next 是 MIT 许可证,就像 GraphQL.js 一样。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建版本
GraphQL-core-next-1.1.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 76b52e7f654d8fc6abefc8583ebfd869a3939590813110ad27c0c0908b7d0659 |
|
MD5 | 2de6923aa6068bd29b704e73559af8fc |
|
BLAKE2b-256 | e2aeb1fc0f5dc4f0d6ccf4b41f18f5dc031ab2ab9fda07c27550c3fb38173025 |
GraphQL_core_next-1.1.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 254187ad5f5acdfd521429d87fd3c05896dc1b74ddcb30b1fa37905dc1dc7c13 |
|
MD5 | bb5d8145d354dddb0d20c143d314474b |
|
BLAKE2b-256 | fa632bebc0a51568bbc70c36945611c666febf7b90f19b60fa8516ab0a86ecc4 |