Graphql 图形ql+;继电器+;石墨烯

Graphql 图形ql+;继电器+;石墨烯,graphql,relay,graphene-python,Graphql,Relay,Graphene Python,我正在尝试使用GraphQL+中继+格雷芬。但我有点困惑。我可以使用中继支持这两个查询吗?或者在实现realy时,我只支持第二个 我是否总是需要将globalId转换为数据库主键 图QL: class Product(SQLAlchemyObjectType): class Meta: model = ProductModel interfaces = (relay.Node, ) @classmethod def get_node(cl

我正在尝试使用GraphQL+中继+格雷芬。但我有点困惑。我可以使用中继支持这两个查询吗?或者在实现realy时,我只支持第二个

我是否总是需要将globalId转换为数据库主键

图QL:

class Product(SQLAlchemyObjectType):
    class Meta:
        model = ProductModel
        interfaces = (relay.Node, )

    @classmethod
    def get_node(cls, id, context, info):
        #must implement to relay
        pass


class Query(graphene.ObjectType):
    product = graphene.Field(Product, id=graphene.String())
    node = relay.Node.Field()

    def resolve_product(self, args, context, info):
        session =  context['session']
        id_ = from_global_id(args['id'])[1]
        p = session.query(ProductModel).filter(ProductModel.id == id_).first()
        return p
接力:

{
    product (id: "XYZ"){
       id
       title
    }
}

中继规范和实现要求除了您的查询根(通常是
查看器
)之外,您还支持一个
节点
查询

中继需要获取特定节点的字段时,将在内部使用
节点
。 不管节点是什么,如果您真的想要一个
产品
查询,请自己从一个中继容器中调用它

至于全局id,是的-您始终需要将全局id转换为主键。 但更确切地说,您始终需要将全局ID转换为查询的ObjectType后面的任何DB的内部键表示形式。
全局id包含类型信息—我们正在尝试获取的ObjectType。如果没有这些信息,框架将不知道要将id发送到哪个ObjectType,这样它就可以进行抓取。

中继规范和实现要求除了您的查询根(通常是
查看器
)之外,您还支持
节点
查询

中继需要获取特定节点的字段时,将在内部使用
节点
。 不管节点是什么,如果您真的想要一个
产品
查询,请自己从一个中继容器中调用它

至于全局id,是的-您始终需要将全局id转换为主键。 但更确切地说,您始终需要将全局ID转换为查询的ObjectType后面的任何DB的内部键表示形式。 全局id包含类型信息—我们正在尝试获取的ObjectType。如果没有这些信息,框架将不知道要将id发送到哪个ObjectType,从而可以执行抓取

{
        node(id: "XYZ") {
          id
          ... on product {
            title
          }
        }