如何以及何时为 graphql 生成 ID?

2023-12-22

我正在将 graphql 与 SQLite 数据库连接。

在 sql 中,id 是整数,但在 graphql 中,id 是字符串。

经过搜索,基于这个问题——何时使用 GraphQLID 而不是 GraphQLint? https://stackoverflow.com/questions/39471075/when-to-use-graphqlid-instead-of-graphqlint

提出三点建议:

  • 开始使用 UUID 进行 PK。然而,这会对性能产生影响。
  • 忽略在整个应用程序中具有唯一 ID 的隐含要求(源自 Relayjs 生态系统),并在可能的情况下将 ID 转换为数字以供内部使用。
  • 应用程序数据层上的哈希编码 ID,例如UUID base64 源自表名称和 PK 值的串联。

并且推荐第三种。但我不确定在哪里以及如何实施它。另外,为什么 graphql ID 是字符串?答案可能会影响该 ID 部分的实现方式。


为什么 GraphQL ID 的序列化与字符串相同?

作为 API 的数据查询语言,GraphQL 在涉及互操作性时最好是特定的,但在其他方面是通用的,以适应不同的用例。如果您查看 GraphQL 规范中引用的部分回答你链接到的 https://stackoverflow.com/a/39472164,你可以看到它具体是关于how数据进行通信(“ID 类型的序列化方式与字符串相同”),同时不具体说明whatID类型的内容是(仅说它“代表唯一标识符”,“通常是数字”,但并不总是如此,无需详细说明)。将 ID 类型序列化为字符串是提供其他未指定标识符数据通信的最直接方法。

因此,虽然您确实需要将 ID 序列化为字符串,但这些 ID 采取什么形式预序列化取决于您,因为这最适合您的应用程序。

如何实现序列化

如果您要使用像 Relay.js 这样的东西,其中 ID 需要全局唯一,那么我建议使用第三种方法,即连接表名和主键,然后对结果进行 Base64 编码。 (这就是 GraphQL.js 和 Graphene 的做法。)在不了解有关您的应用程序的更多信息的情况下,我无法说太多where你应该进行序列化,但这里有几个例子how你可以对 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(':')

希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以及何时为 graphql 生成 ID? 的相关文章

  • Android SQLite 按 utf8 整理/排序

    我在 Android 上的 SQLite 表中有以下项目 平板电脑选项卡有 1 列 名称 文本 Beta Work pal User 如果我在 SQL Server 中有这些项目 并带有斯洛伐克语的排序规则 并且select from ta
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 用更轻的解决方案替换完整的 ORM(JPA/Hibernate):推荐的加载/保存模式?

    我正在开发一个新的 Java Web 应用程序 并且正在探索保存数据的新方法 对我来说是新方法 我主要有 JPA 和 Hibernate 的经验 但是 除了简单的情况之外 我认为这种完整的 ORM 可能会变得相当复杂 另外 我不太喜欢和他们
  • 使用 ADODB 连接从关闭的工作簿中检索数据。某些数据被跳过?

    我目前正在编写一些代码 可以通过 ADODB 连接访问单独的工作簿 由于速度的原因 我选择了这种方法而不是其他方法 下面是我的代码 Sub GetWorksheetData strSourceFile As String strSQL As
  • 初级SQL部分:避免重复表达式

    我对 SQL 完全陌生 但我们可以说StackExchange 数据浏览器 https data stackexchange com 我只想按信誉列出前 15 位用户 我写了这样的内容 SELECT TOP 15 DisplayName I
  • 自加入表

    我有一张像这样的桌子 Employee name salary a 10000 b 20000 c 5000 d 40000 我想获取所有工资高于A工资的员工 我不想使用任何嵌套或子查询 在采访中被问及并暗示是使用自连接 我真的不知道如何实
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 计算运行总计时出错(之前期间的累计)

    我有一张桌子 我们称之为My Table有一个Created日期时间列 在 SQL Server 中 我试图提取一个报告 该报告显示历史上有多少行My Table按月在特定时间 现在我知道我可以显示有多少added每个月 SELECT YE
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p

随机推荐

  • 如何使用 setInterval() 返回 Promise

    我试图每 1000 毫秒返回一个 Promise 对象 但我不确定如何访问 Promise 中返回的数据setInterval 打回来 EDIT我似乎不太清楚我的意图 所以我会尝试解释我正在尝试做什么 我进行倒计时 根据指定的结束日期每 1
  • 每个div的Html2canvas分别导出为pdf

    我有页面 它有 6 个具有相同类名 exportpdf 的 div 我使用这些 div 将这些 div 转换为 pdfjspdf and html2canvas var elementTobePrinted angular element
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • Android Camera.takePicture 失败

    作为一个学习练习 我正在编写一个安全应用程序 当任意事件发生时 需要打开相机 拍照 然后关闭相机 而不必担心闪光灯 对焦或显示预览 我按照在线演示制作了一个可以拍照的应用程序 但它使用预览等等 所以我开始努力让它在没有预览的情况下工作 不管
  • C# using 语句如何转换为 Try-Finally

    我正在努力解决这个问题 根据这一页 https msdn microsoft com en us library yh598w02 aspx on Using声明 using 语句可确保即使在调用对象方法时发生异常 也会调用 Dispose
  • 如何设置 Google 地点 API 自动完成文本框的默认值

    我正在开发一个与谷歌示例中的页面足够接近的页面https developers google com maps documentation javascript examples places autocomplete addressfor
  • 您必须为 TextView 提供资源 ID

    我搜索了与此问题相关的现有教程 并且我遵循了该示例 但我仍然遇到同样的错误 当我更改 android R layout simple list item1 行时 它将无法工作 MyCode public class Lisearch ext
  • 如何自动应用 generic.xaml 中的数据模板?

    我有一个自定义控件 它有一个 ContentPresenter 它将任意对象设置为其内容 该对象对其类型没有任何限制 因此我希望该控件根据应用程序定义的任何数据模板或 Generic xaml 中定义的数据模板显示其内容 如果在应用程序中我
  • CSS 和 DIV,带有标题和正文,内容可滚动,侧边栏固定在右侧

    我四处寻找 但无法解决这个问题 所以我转向这里 I want to make a layout that looks like this 布局由三个字段组成 顶部的标题具有固定高度 动态宽度和垂直可滚动内容 标题下方的正文 具有动态宽度和高
  • DLL加载失败:执行“from mpi4py import MPI”时找不到指定的模块

    我正在尝试在 Windows 7 64 位上使用 Mpi4py 1 3 和 python 2 7 我从以下位置下载了可安装版本here http www lfd uci edu 7Egohlke pythonlibs 其中包括 OpenMP
  • 每个人工创建的代码文件的开头是否都有文件头注释?

    我正在经历一体化代码框架 http 1code codeplex com 编码标准文档和建议之一是在每个人工创建的代码文件的开头添加文件头注释 这是我第一次看到这样的建议 对我来说这只是一个不必要且丑陋的混乱 但我想知道是否有人可以解释为什
  • HTC WildFire 上的 SharedPreferences EditText 对话框被挤压

    我在我的 Android 应用程序中以标准方式使用 SharedPreferences 在 HTC WildFire 设备 分辨率 240x320 上 显示虚拟键盘时 EditText 会被挤压 有没有其他人遇到过这个 有解决办法吗 我已经
  • 验证日期序列的顺序是否正确

    我有一个包含 4 列日期的数据框 应该是 col1 首先出现 col2 其次出现 col3 第三出现 col4 最后出现 我想确定哪些行的日期不按顺序排列 这是一个玩具数据框 col1 lt c as Date 2004 1 1 as Da
  • 如何仅导入存在的模块?

    我正在做 降临代码 这是 25 个编程问题的集合 每一天对应一个 我在自己单独的文件 模块中构造每一天 因此例如 2021 年第 7 天将位于src years year2021 day07 rs So src years year2021
  • AngularJS - 如何向服务器上的控制器提交表单?

    食谱表格示例AngularJS 网站 http www AngularJS org只在客户端保存状态 如何提交到服务器 或者 我如何使用 jQueryform submit 在表格中的ng click save 功能 编辑 找到了 2 种方
  • 比较循环数组中的元素(java)

    我正在尝试制定一个 for 循环 该循环将采用一个数组 例如 5 个元素 并且允许我处理a 0 仿佛是在之后a 4 and a 4 就像以前一样a 0 我无法更改数组 并且它在每个元素中存储一个线程 因此我宁愿使其尽可能简单 以免损坏线程的
  • Qt 以最佳质量调整图像大小

    任何人都可以帮助我在 qt 中调整图像大小而不使图像像素化 这是我的代码 结果不如原来的质量 谢谢 QImage img name QPixmap pixmap pixmap pixmap fromImage img scaled widt
  • 用于游戏编程的 C++ - 爱还是不信任? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 以游戏编程效率的名义 一些程序员不信任某些 C 功能 我的一位朋友自称了解游戏行业的运作方式 并会提出以下评论 不要使用智能指针 游戏中没有人这
  • 我需要手动释放CFStringRef吗?

    您能告诉我在非 ARC 世界中哪种方法是正确的以及为什么吗 NSString getUUID CFUUIDRef theUUID CFUUIDCreate NULL CFStringRef string CFUUIDCreateString
  • 如何以及何时为 graphql 生成 ID?

    我正在将 graphql 与 SQLite 数据库连接 在 sql 中 id 是整数 但在 graphql 中 id 是字符串 经过搜索 基于这个问题 何时使用 GraphQLID 而不是 GraphQLint https stackove