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查询语言。
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一样。