Hasura Relay - 如何使用 Base64 编码的 ID?

Hasura Relay - How to work with Base64 encoded id's?

我很困惑在使用 Hasura 的中继端点时如何使用 base64 编码的 ID。我的第一个问题出现在尝试初始化下拉组合框组件以将“选项值”设置为等于相关 table 的外键时(见下图)。我的下一个问题是如何将 ID 传递给参数化查询(这样我就可以检索具有给定“id”的订单的详细信息)。因为所有这些标识符都是 base64 编码的,所以做起来并不容易,我确定我一定是遗漏了一些东西。

这些 id 是否专门编码为警告我们根本不应该依赖或在我们的代码中使用它们,或者我们应该解码它们并将它们用于分页、参数化查询和组合框等事情, ETC?希望能帮助您理解。

这是我在使用组合框时遇到的问题示例:Base64 Mangled Combo-box

我想也许使用最新版本的 Hasura,我们现在可以获取数据库 ID。解码后的base64编码id是一个数组,所以我们现在可以通过引用数组索引3来获取数据库id,如下例所示。


    const encodedHasuraRelayID = "WzEsICJsaWZlcGxhbiIsICJzdGF0dXNfcGxhbl9oZWFkZXIiLCAxXQ=="
    const decodedRelayID = atob(encodedHasuraRelayID)
    const relayIdAsArray = eval(decodedRelayID)
    const actualDatabaseID = relayIdAsArray[3]
    
    console.log(decodedRelayID)    // "[1, \"lifeplan\", \"status_plan_header\", 1]"
    console.log(relayIdAsArray)    // [1, "lifeplan", "status_plan_header", 1] 
    console.log(actualDatabaseID)  // 1  (the actual database ID)!

虽然我在其他地方读到过在 javascript 中使用 eval() 是邪恶的,但这似乎有效,所以如果有人知道从“decodedRelayID”转换为“relayIdAsArray”的更好方法,请告诉我知道。

Discussion of ObjectID Resolution in Relay