graphql core next是graphql.js的一个python端口,graphql的javascript引用实现。

GraphQL-core-next的Python项目详细描述


graphql core next

graphql core next是一个python 3.6+端口,端口是graphql.js, graphql的javascript引用实现, Facebook创建的API查询语言。

pypi version文档状态构建状态覆盖状态依赖关系更新python 3 statuscode style

graphql core next的当前版本1.1.1是graphql.js版本的最新版本 144.0。API的所有部分都包含在目前1885年的广泛测试套件中 单元测试。

从现在起,将继续使用新的发行版名称graphql core进行开发。

graphql core next现在是graphql core 3

graphql core next作为一个单独的python发行版已经停止使用。 相反,它现在作为graphql核心版本3和更新版本发布,取代 现有的graphql核心分布。Graphql核心的旧版本, 它也支持旧的python版本,仍然可用。

文档

关于graphql core next的更详细的文档可以在 graphql core next.readthedocs.io

graphql.js的文档可以在graphql.org/graphql js/上找到。

graphql本身的文档可以在graphql.org上找到。

也会有更多的使用博客文章。 示例。

开始

graphql的概述可以在 自述文件 Graphql规范。概述 描述一组简单的graphql示例,这些示例在本文中作为测试存在 储存库。开始使用这个存储库的一个好方法是遍历 自述文件和相应的并行测试。

安装

graphql core next可以使用内置的pip命令从pypi安装:

python -m pip install graphql-core-next

或者,您也可以在 虚拟环境:

pipenv install graphql-core-next

用法

graphql core next提供了两个重要的功能:构建类型模式,以及 提供针对该类型架构的查询。

首先,构建一个映射到您的代码库的graphql类型模式:

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

它定义了一个简单的模式,其中包含一个类型和一个字段,该模式解析为 价值。函数可以返回值、共同例程对象或 这些。它接受两个位置参数;第一个参数提供根或 解析父字段,第二个字段提供一个graphqlresolveinfo对象 包含有关查询执行状态的信息,包括上下文 每个请求状态的属性保持,如身份验证信息或数据库 会话。任何graphql参数都作为单个参数传递给resolve函数 关键字参数。

注意解析器函数的签名在graphql.js中有点不同, 其中上下文单独传递,参数作为单个对象传递。 还要注意,graphql字段必须显式地作为graphqlfield对象传递。 类似地,graphql参数必须作为graphqlargument对象传递。

一个更复杂的例子包含在顶层的tests目录中。

然后,根据该类型模式提供查询结果。

fromgraphqlimportgraphql_syncquery='{ hello }'print(graphql_sync(schema,query))

这将运行一个查询,获取定义的一个字段,然后打印结果:

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

graphql_sync函数将首先确保查询的语法和 执行前语义有效,否则报告错误。

fromgraphqlimportgraphql_syncquery='{ 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函数。

importasynciofromgraphqlimport(graphql,GraphQLSchema,GraphQLObjectType,GraphQLField,GraphQLString)asyncdefresolve_hello(obj,info):awaitasyncio.sleep(3)return'world'schema=GraphQLSchema(query=GraphQLObjectType(name='RootQueryType',fields={'hello':GraphQLField(GraphQLString,resolve=resolve_hello)}))asyncdefmain():query='{ hello }'print('Fetching the result...')result=awaitgraphql(schema,query)print(result)loop=asyncio.get_event_loop()try:loop.run_until_complete(main())finally:loop.close()

目标和限制

graphql core接下来尝试重新生成参考实现graphql.js的代码 在python中尽可能接近并保持最新的 graphql.js.

它被创造成一种现代的替代品 graphql-core,先前的工作 由Syrus Akbary开发,基于graphql.js的旧版本,还针对 较旧的python版本。graphql core next的一些部分灵感来自 graphql核心或直接接管,只需稍加修改,但大部分代码 已经从头开始重新实现,在graphql.js中复制了最新的代码 密切关注并为python添加类型提示。

graphql核心下一个库的设计目标是:

  • 使用current 库和语言版本
  • 非常接近graphql.js引用实现,同时仍然使用 pythonic api和代码样式
  • 要广泛使用python类型提示,类似于graphql.js如何使用流
  • 使用黑色进行自动代码格式化
  • 复制完整的摩卡咖啡使用graphql.js的est套件 pytest

一些限制(主要与设计目标一致):

  • 需要python 3.6或3.7
  • 不支持graphql.js的一些已经被弃用的方法和选项
  • 仅通过async.io支持异步操作 (不支持graphql核心中的附加执行器)
  • 基准尚未移植到python

与其他库和路线图集成

  • graphene是一个更高层次的构建框架 python中的graphqlapi,已经有一个完整的库、服务器生态系统 基于石墨烯的集成和工具。大部分石墨烯生态系统 同样是由西鲁斯·阿克巴里创造的,他同时也交了维修费。 以及graphql python社区成员的未来发展。

    当前版本2的graphene使用graphql core作为 举重。请注意,graphene 2与graphql core next不兼容。 不过,新版本的graphene 3计划使用graphql core next,而不是 graphql core和graphql core next将重命名为graphql core 3。

  • ariadne是一个用于实现 使用由mirume软件创建的模式优先方法的graphql服务器。

    ariadne已经在使用graphql core next作为其graphql实现。

  • 草莓,由patrick创建 Arminio是Python3的一个新GraphQL库,灵感来自于数据类, 下一步还将使用GraphQL Core作为基础。

更改日志

更改被跟踪为 Github版本

学分和历史

graphql核心下一个库

  • 由Christoph Zwerschke创建并维护
  • 使用graphql core的思想和代码,syrus akbary以前的工作
  • 是由lee byron等人开发的graphql.js的python端口 在facebook,inc.和 通过 GAPQL基金会

请观看李拜伦在 图形历史 在2019年的开源领导力峰会上 graphql是如何和为什么在facebook上创建的,然后成为开源的 并移植到许多不同的编程语言。

许可证

Graphql核心下一个是 麻省理工学院授权的, 就像graphql.js一样。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法