python的中继实现

graphql-rela的Python项目详细描述


graphql python的中继库

这是一个库,允许使用 GraphQL Python引用实现 一个graphql服务器。

注意:代码是原始graphql-relay js implementation精确的端口 从Facebook

PyPI versionBuild StatusCoverage Status

开始

需要基本了解graphql和graphql python实现 提供此库的上下文。

graphql的概述可以在 README对于 Specification for GraphQL

这个库设计用于 GraphQL Python引用实现 一个graphql服务器。

与中继兼容的graphql服务器应该具备的功能概述 提供在GraphQL Relay SpecificationRelay website上。概述 描述一个简单的示例集合,该实例以tests的形式存在。 储存库。开始使用这个存储库的一个好方法是遍历 该文档与此库中的相应测试一起。

使用graphql python的中继库(graphql核心)

为graphql python安装中继库

pip install "graphql-core>=2,<3"# use version 2.x of graphql-core
pip install graphql-relay

GraphQL构建架构时, 提供的库函数可用于简化继电器的创建 模式。

连接

helper函数用于构建graphql类型 对于连接和实现字段的resolver方法 返回这些类型。

  • connection_args返回当 它们返回连接类型。
  • connection_definitions返回connection_type及其关联 edgeType,给定名称和节点类型。
  • connection_from_list是一个helper方法,它接受一个列表和 来自connection_args的参数,执行分页和筛选,并返回 由connection_typeresolver函数所期望的形状的对象。
  • connection_from_promised_list类似于connection_from_list,但是 它需要一个promise,它解析为一个数组,并返回一个promise 通过connection_type解析为预期形状。
  • cursor_for_object_in_connection是一个助手方法,它接受一个列表和一个 成员对象,并返回一个游标以用于变异负载。

这些方法的示例用法来自test schema

ship_edge,ship_connection=connection_definitions('Ship',shipType)factionType=GraphQLObjectType(name='Faction',description='A faction in the Star Wars saga',fields=lambda:{'id':global_id_field('Faction'),'name':GraphQLField(GraphQLString,description='The name of the faction.',),'ships':GraphQLField(ship_connection,description='The ships used by the faction.',args=connection_args,resolver=lambdafaction,_info,**args:connection_from_list([getShip(ship)forshipinfaction.ships],args),)},interfaces=[node_interface])

这显示了向作为连接的Faction对象添加ships字段。 它使用connection_definitions({name: 'Ship', nodeType: shipType})创建 连接类型,添加connection_args作为此函数的参数,并且 然后通过传递船舶列表和 connection_from_list的参数。

物体识别

helper函数用于构建graphql类型 对于节点和围绕本地id实现全局id。

  • node_definitions返回对象可以实现的Node接口, 并返回要包含在查询类型中的node根字段。实施 这需要一个函数将id解析为一个对象,并确定 给定对象的类型。
  • to_global_id接受特定于该类型名的类型名和id, 并返回在所有类型中唯一的“全局id”。
  • from_global_id获取由to_global_id创建的“全局id”,并返回 用于创建它的类型名和ID。
  • global_id_field为节点上的id字段创建配置。
  • plural_identifying_root_field创建一个字段,该字段接受 非id标识符(比如用户名)然后映射到它们对应的 物体。

这些方法的示例用法来自test schema

defget_node(global_id,_info):type_,id_=from_global_id(global_id)iftype_=='Faction':returngetFaction(id_)eliftype_=='Ship':returngetShip(id_)else:returnNonedefget_node_type(obj,_info):ifisinstance(obj,Faction):returnfactionTypeelse:returnshipTypenode_interface,node_field=node_definitions(get_node,get_node_type)factionType=GraphQLObjectType(name='Faction',description='A faction in the Star Wars saga',fields=lambda:{'id':global_id_field('Faction'),},interfaces=[node_interface])queryType=GraphQLObjectType(name='Query',fields=lambda:{'node':node_field})

它使用node_definitions来构造Node接口和node 字段;它使用from_global_id来解析在实现中传入的id 将id映射到对象的函数。然后使用global_id_field方法 在Faction上创建id字段,这也确保实现 node_interface。最后,它使用 node_fieldnode_definitions返回。

突变

为buildi提供了一个helper函数ng突变 单输入和客户端变异ID。

  • mutation_with_client_mutation_id接受名称、输入字段、输出字段, 以及一种从输入字段映射到输出字段的变异方法, 一路上进行变异。然后它创建并返回一个字段 可以用作变异类型的顶级字段的配置。

这些方法的示例用法来自test schema

classIntroduceShipMutation(object):def__init__(self,shipId,factionId,clientMutationId=None):self.shipId=shipIdself.factionId=factionIdself.clientMutationId=clientMutationIddefmutate_and_get_payload(_info,shipName,factionId,**_input):newShip=createShip(shipName,factionId)returnIntroduceShipMutation(shipId=newShip.id,factionId=factionId,)shipMutation=mutation_with_client_mutation_id('IntroduceShip',input_fields={'shipName':GraphQLField(GraphQLNonNull(GraphQLString)),'factionId':GraphQLField(GraphQLNonNull(GraphQLID))},output_fields={'ship':GraphQLField(shipType,resolver=lambdapayload,_info:getShip(payload.shipId)),'faction':GraphQLField(factionType,resolver=lambdapayload,_info:getFaction(payload.factionId))},mutate_and_get_payload=mutate_and_get_payload)mutationType=GraphQLObjectType('Mutation',fields=lambda:{'introduceShip':shipMutation})

这段代码创建了一个名为IntroduceShip的突变,它接受一个派别 输入id和船名。它输出FactionShipin 问题。mutate_and_get_payload然后获取具有 每个输入字段,通过构造新船来执行变异,然后 返回将由输出字段解析的对象。

然后,我们的突变类型使用返回值创建introduceShip字段 mutation_with_client_mutation_id的值。

贡献

克隆此repo后,请确保通过运行以下命令安装依赖项:

python setup.py install

开发完成后,可以通过运行:

python setup.py test# Use --pytest-args="-v -s" for verbose mode

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

推荐PyPI第三方库


热门话题
值为ArrayList的java ConcurrentHashMap   使用SpringRESTTemplate的java Post多部分(PDF)文件   如果数据太小,Java刷新进程的输出流不会立即发送数据   游戏物理Java:玩家移动错误   java使用小型数据类型是否会减少内存使用(从内存分配而不是效率)?   java如何在SeleniumWeb驱动程序的类属性中验证映像   java使用Maven汇编插件设置Linux文件权限,即使在其他平台上运行?   java我需要在一个对象中保存一个mp4文件,以便将其存储在链接列表中。可能吗?   java删除组织中的重复项。dom4j。文档对象   java组织。冬眠LazyInitializationException:无法初始化没有会话5的代理   java使用JFileChooser允许Swing用户指定输出位置   java JFreeChart,如何重新缩放yaxis   java响应头GAE端点   java安卓:更改视图大小