在我的数据库(postgres)中,我存储了一个事件表,每个事件都有一个“ id”列,它是UUID类型。但是,当我发送GraphQL查询时,收到的ID并不是字符串UUID,而是一些加密版本。
如果该信息有帮助,我正在服务器端使用Relay和Graphene。
query {
allEvents {
edges {
node {
id
}
}
}
}
{
"data": {
"allEvents": {
"edges": [
{
"node": {
"id": "RXZlbnQ6NzRkZTIxZmUtZWQyNy00OTg1LTk2NjEtNmU4ZDUzMGEwMjQ3"
}
}
]
}
}
}
答案 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
方案。