我将graphql与SQLite数据库连接起来。
在sql中,id是整数,但在graphql id中是字符串。
根据此问题进行搜索后,When to use GraphQLID instead of GraphQLInt?
陈述三个建议:
建议第三个。但我不确定在何处以及如何实施它。另外,为什么graphql ID成了String?答案可能会影响ID部分的实现方式。
答案 0 :(得分:10)
作为API的数据查询语言,希望GraphQL在涉及互操作性的情况下是特定的,但一般情况下也适用于不同的用例。如果您查看answer you linked to中GraphQL规范的引用部分,您可以看到它特定于如何传递数据(“ID类型的序列化方式与字符串相同“),与 ID类型的内容无关(仅表示它”代表唯一标识符“,”通常是数字“但并非总是如此,而不是详细说明)。将ID类型序列化为字符串是提供未指定标识符数据通信的最直接方式。
因此,虽然您确实需要将ID序列化为字符串,但这些ID采用预序列化的形式取决于您,最适合您的应用程序。
如果您要与Relay.js进行交谈,其中ID需要全局唯一,那么我建议第三种方法,即连接表名和主键,然后对结果进行Base64编码。 (这就是GraphQL.js和Graphene都是这样做的。)在不了解你的应用程序的情况下,我不能多说 where 你应该进行序列化,但这里有几个例子< em>如何你可以编码ID:
# Node.js
var table_name = 'MyTable';
var primary_key = 1234;
var serialized_id = Buffer.from(table_name + ':' + primary_key).toString('base64');
# Python 3
import base64
table_name = 'MyTable'
primary_key = 1234
serialized_id = base64.b64encode((table_name + ':' + str(primary_key)).encode()).decode()
以及如何解码它们:
# Node.js
var serialized_id = 'TXlUYWJsZToxMjM0';
var [table_name, primary_key] = Buffer.from(serialized_id, 'base64').toString('ascii').split(':');
# Python 3
serialized_id = 'TXlUYWJsZToxMjM0'
(table_name, primary_key) = base64.b64decode(serialized_id.encode()).decode().split(':')
希望有所帮助!