【问题标题】:GraphQL + Relay + GrapheneGraphQL + 中继 + 石墨烯
【发布时间】:2017-05-13 06:41:36
【问题描述】:
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

我正在尝试使用 GraphQL + Relay + Grephene。但我有点困惑。我可以使用中继支持这两个查询吗?还是在真正实施时我只会支持第二个?

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

图 QL:

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

中继:

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

【问题讨论】:

    标签: graphql relay graphene-python


    【解决方案1】:

    中继规范和实现要求除了您的查询根(通常是 viewer)之外,您还需要支持 node 查询

    当需要获取特定节点的字段时,Relay 将在内部使用node。 无论节点是什么,如果您真的想要一个 product 查询并从您的中继容器之一自己调用它。

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

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2020-07-27
      • 2018-03-11
      • 2020-09-19
      • 2018-03-30
      • 2018-09-19
      • 2018-03-22
      • 2019-08-26
      • 2023-03-31
      相关资源
      最近更新 更多