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

Are ids automitaclly encrypted in Graphql queries?

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

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

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


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

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

在 GraphQL 级别,ID 只不过是一个不透明的 ID。 The spec 本身并没有说太多,只是它序列化为一个字符串,但可以接受一个数字作为输入。我使用过的大多数 application-oriented 服务器库也没有在 ID 周围放置太多特殊语义,就像它传入和传出的其他标量类型一样 as-is.

关于 Relay's object identification scheme 的文档的最后一段(node top-level 查询)也强烈认为应用程序不应合成 ID 值,因此 base64 编码至少向消费者暗示该值不应该被理解。这里的 base64 编码不是通用的或 hard-coded 在 GraphQL 中,应用程序或库可以根据需要选择不同的 ID 方案。