主要观点:在系统中,关注使用的 id 类型很重要,作者最喜欢人类可读的类型,如在 Stripe 中见到的。在编写 GraphQL 服务器时,可使用 relay 的“Object Identification”模式,依赖系统中的全局唯一 id 来查找记录。作者在 Rails GraphQL 服务器中使用 rails 的 globalid 库,但 ids 很长,需管理数据库主键和全局 id 版本,且需写很多胶水代码。作者阅读相关文章后决定在自己的系统中使用更好的 ids,它们以字符串为主键,在应用代码中生成而非数据库,还编写了一个小库方便在 Rails 应用中采用。
关键信息:
- 人类可读的 id 示例如
cus_NffrFeUfNV2Hib
(客户)和re_1Nispe2eZvKYlo2Cd31jOCgZ
(退款)。 - GraphQL 服务器的“Object Identification”模式要求提供
Node
接口,其中id
字段为非空ID
,且应是全局唯一标识符。 - rails 的 globalid 库的缺点及 ids 较长。
- 参考文章What makes a good ID?和planetscale’s blog post on nanoids。
- 新的 ids 库https://github.com/schpet/cool_id和https://rubygems.org/gems/cool_id。
重要细节:在 lobste.rs 上有关于此的讨论,David Bryant Copeland 写了相关文章why you shouldn’t use these as primary keys,新库支持“external id”方法,通过id_field
选项实现。在设置数据库模式时会应用该模式到主键。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。