如何以及何时为 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? 的相关文章

  • 在 Sql Server 中启用 DTD 支持

    我有各种 xml 文档需要存储在数据库列中 这些文档包含对 DTD 的引用 并且 SQL Server 不会导入 xml 因为它存在安全风险 如何在数据库上启用 DTD 支持 以便它可以让我插入 xml 内容 你必须CONVERT首先 MS
  • 将 5 gig 文件导入表时出错

    我正在尝试批量插入表 use SalesDWH go BULK INSERT dbo npi FROM S tmp npi csv WITH FIELDTERMINATOR ROWTERMINATOR n lastrow 200 first
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • 如何使用 SQL - INSERT...ON DUPLICATE KEY UPDATE?

    我有一个脚本可以捕获推文并将其放入数据库中 我将在 cronjob 上运行脚本 然后在我的网站上显示数据库中的推文 以防止达到 Twitter API 的限制 所以我不想在我的数据库中有重复的推文 我知道我可以使用 INSERT ON DU
  • HANA 列表/显示表 SQL 命令

    如何通过 SQL 显示 列出 SAP HANA 中的所有表 SAP HANA 通过系统表提供数据库目录 就像大多数其他 DBMS 一样 TABLES https help sap com saphelp hanaplatform helpd
  • MySQL创建表中的日期格式

    我必须使用 MySql 创建一个表 它可以按以下格式存储日期 我尝试过如下 CREATE TABLE birth date DATE 但它不起作用 因为日期格式是 YYYY MM DD 我该怎么办 谢谢 MySQL 或几乎任何其他数据库 中
  • NOLOCK 和 UNCOMMITTED 之间有什么区别

    我使用 SQL Server 2012 我写了两个查询 但是它们之间有什么不同NOLOCK and UnCommitted SELECT lastname firstname FROM HR Employees with READUNCOM
  • SQL 查询中的可选参数在检查 NULL 时非常慢

    我有许多已连接的表 最大行数约为 400 万条记录 我们正在存储过程中搜索该表 并且有一个默认值为 NULL 的可选参数 下面是我们正在运行的编辑示例 连接涉及更多表 但只有 1 个字段具有 WHERE 子句 DECLARE OwnerId
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • 自定义 Sql Server 对象资源管理器右键单击菜单项

    如何在 Sql Server 2012 的对象资源管理器中添加或自定义右键菜单项 例如 我想将新项目添加到表右键菜单中以生成自定义表创建器脚本 您可以编写一个 SSMS 加载项 See http sqlblogcasts com blogs
  • SQL Server 为什么索引不与 OR 一起使用

    我一直在研究索引并试图了解它们是如何工作的以及如何使用它们来提高性能 但我错过了一些东西 我有下表 Person Id Name Email Phone 1 John E1 P1 2 Max E2 P2 我正在尝试找到对列进行索引的最佳方法
  • 用于选择项目/属性列表中具有多个属性的项目的 SQL 语句是什么?

    假设我有一个表 其中列出的项目和属性如下 frog green cat furry frog nice cat 4 legs frog 4 legs 我想从项目列中选择同时具有绿色和 4 条腿属性的唯一对象 在这种情况下 我希望只返回青蛙对
  • 使用 JWT 通过 Asp.net core 进行 GraphQL 身份验证

    我正在使用 NET 的 GraphQL https www nuget org packages GraphQL 2 0 0 alpha 912graphql 的包 但我无法理解如何在 graphql 查询或突变中使用 JWT 进行身份验证
  • 检索前 10 行并对第 11 行中的所有其他行求和

    我有以下查询来检索每个国家 地区的用户数量 SELECT C CountryID AS CountryID C CountryName AS Country Count FirstName AS Origin FROM Users AS U
  • SQL Server 'FETCH FIRST 1 ROWS ONLY' 无效使用

    我正在尝试将 Db2 查询转换为 SQL Server 我遇到了一个我不熟悉的构造 仅 FETCH FIRST 1 ROWS 这是在 db2 上运行的查询 select from products series where state xx
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • 分区表查询仍然扫描所有分区

    我有一个包含超过十亿条记录的表 为了提高性能 我将其分区为30个分区 最常见的查询有 id 在他们的 where 子句中 所以我决定对表进行分区id column 基本上 分区是这样创建的 CREATE TABLE foo 0 CHECK
  • 使用 Athena 从 AWS WAF 日志中的规则组列表获取终止规则

    我跟着这些说明 https docs aws amazon com athena latest ug waf logs html将我的 AWS WAF 数据放入 Athena 表中 我想查询数据以查找具有 BLOCK 操作的最新请求 此查询
  • 本地 SQLite 与远程 MongoDB

    我正在设计一个新的 Web 项目 在研究了一些旨在可扩展性的选项后 我提出了两个数据库解决方案 为可扩展方式精心设计的本地 SQLite 文件 每个 X 用户一个新的数据库文件 因为写入将取决于用户内容 不存在跨用户数据依赖性 远程 Mon
  • BigQuery 标准 SQL 中具有不同架构的联合表

    附加具有不同架构的表的最佳方法是什么 表 0 架构 表1 架构 这很好用 SELECT img1 NULL as img2 FROM xxx staging table0 UNION ALL SELECT img1 img2 FROM xx

随机推荐

  • 如何使用 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