热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何以及何时为graphql生成ID?》经验,为你挑选了1个好方法。

我将graphql与SQLite数据库连接起来.

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

搜索之后,基于这个问题 - 何时使用GraphQLID而不是GraphQLInt?

说明有三个建议:

开始使用UUID进行PK.但是,这会影响性能.

忽略隐式需求(源自relayjs生态系统)以使ID在整个应用程序中唯一,并在可能的情况下将ID转换为数字以供内部使用.

哈希在应用程序数据层上编码ID,例如,从表名和PK值的串联派生的UUID base64.

它建议第三个.但我不确定在何处以及如何实施它.另外,为什么graphql ID成了String?答案可能会影响ID部分的实现方式.



1> Sean Bolton..:

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

作为API的数据查询语言,希望GraphQL在涉及互操作性的情况下是特定的,但通常用于适应不同的用例.如果您在链接的答案中查看 GraphQL规范的引用部分,您可以看到它是如何传达数据的("ID类型与字符串的序列化方式相同"),而非特定的关于ID类型的内容是什么(仅表示它"代表唯一标识符","通常是数字"但不总是,而不是详细说明).使ID类型序列化为字符串是提供否则未指定的标识符数据的通信的最直接的方式.

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

如何实现序列化

如果您要与Relay.js进行交谈,其中ID需要全局唯一,那么我建议第三种方法,即连接表名和主键,然后Base64对结果进行编码.(这就是GraphQL.js和Graphene的工作方式.)在不了解应用程序的更多信息的情况下,我不能多说你应该在哪里进行序列化,但这里有一些关于如何编码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(':')

希望有所帮助!


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 基于Redis实现分布式锁剖析
    之前的文章《分布式锁详解-分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实 ... [详细]
  • 开发笔记:快速排序详解(C语言/python)
    快速排序详解介绍:      快速排序于C. ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • linux分区文件信息,Linux中国 文件分区
    在这篇文章中,我们来了解一些用来检查你的系统分区的一些命令,这些命令将检查每个磁盘的分区情况和其它细节,例如总空间容量,已用 ... [详细]
  • 主从复制_mysql主从复制简介
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql主从复制简介相关的知识,希望对你有一定的参考价值。  ... [详细]
  • SpringBoot整合阿里云OSS实现单个图片上传和批量上传
    SpringBoot整合阿里云OSS实现单个图片上传和批量上传 ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
author-avatar
mobiledu2502874483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有