【问题标题】:What is the best way of Query node(id: ID!) implementation with RDBMS使用 RDBMS 实现查询节点(id:ID!)的最佳方式是什么
【发布时间】:2020-11-05 02:00:18
【问题描述】:

GraphQL 和 Relay 规范要求具有 node(id: ID!) 字段的 Query 类型描述和实现如下:

type Query {
  node(id: ID!): Node
}

Relay 想要通过 id 重新获取任何对象。这意味着服务器应该以某种方式了解它应该寻找哪种类型的对象。要扫描 db 中的哪个表。 很明显,id 不能只是序列号或 uuid,因为在这种情况下它必须扫描所有表。这是不好的方法。

我找到了对对象 ID 及其类型进行编码的解决方案,以便能够了解要查询的表。以 base64 编码的“24|User”之类的东西将给出唯一标识符“MjR8VXNlcg==”。我很确定这种方法会奏效,但我想知道有没有更好的方法来处理这种情况?有哪些替代方案?

【问题讨论】:

  • "24|User" 与 "MjR8VXNlcg==" 一样独特,我认为进行 Base64 编码没有意义,Base64 用于将二进制数据编码为 ASCII 字符集几乎所有系统都知道,这里是read this。您使用的不是二进制数据,因此这一步完全没有必要。
  • 是的,你是对的。也可以这样实现

标签: graphql relay graphql-java


【解决方案1】:

https://relay.dev/docs/en/graphql-server-specification.html#object-identification 给出了答案。

没有全局唯一 ID 的系统通常可以通过将类型与特定于类型的 ID 组合来合成它们...

所以我在问题中做了什么。但是他们使用了另一种格式:“TypeName: id”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2013-10-25
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多