跳转到主要内容

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参考实现。

PyPI version Documentation Status Build Status Coverage Status Dependency Updates Python 3 Status Code Style

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 (304.1 kB 查看哈希值)

上传时间 源代码

构建版本

GraphQL_core_next-1.1.1-py3-none-any.whl (178.2 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面