ID是否在Graphql查询中自动加密?

时间:2019-06-16 22:42:12

标签: graphql relay

在我的数据库(postgres)中,我存储了一个事件表,每个事件都有一个“ id”列,它是UUID类型。但是,当我发送GraphQL查询时,收到的ID并不是字符串UUID,而是一些加密版本。

如果该信息有帮助,我正在服务器端使用Relay和Graphene。

query {
  allEvents {
    edges {
      node {
        id
      }
    }
  }
}


{
  "data": {
    "allEvents": {
      "edges": [
        {
          "node": {
            "id": "RXZlbnQ6NzRkZTIxZmUtZWQyNy00OTg1LTk2NjEtNmU4ZDUzMGEwMjQ3"
          }
        }
      ]
    }
  }
}

1 个答案:

答案 0 :(得分:1)

常见的实现选择是对ID和游标值进行base64编码(您显示的查询遵循Relay's pagination conventions)。如果您对问题中输入的字符串进行base64解码,则会再次找到UUID。

在GraphQL级别,ID只不过是一个不透明的ID。 The spec本身并没有多说,只是它序列化为字符串,但可以接受数字作为输入。我使用过的大多数面向应用程序的服务器库也没有在ID周围添加特殊语义的方式,就像其他标量类型一样,它按原样传递。

关于Relay's object identification scheme的文档的最后一段(node顶级查询)也强烈认为应用程序不应该合成ID值,因此base64编码至少向消费者暗示不应理解该值。此处的base64编码不是GraphQL中的任何常规或硬编码,如果需要,应用程序或库可以选择其他ID方案。