rest - UUID 作为主键 - REST API 指南
问题描述
在 postgres 我创建了一个表:
create table examples(id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
name VARCHAR);
为了从表示例中获取我的所有值,我在我的框架处理程序中创建了一个端点:
GET "/examples[/]?"
如果我使用 SERIAL 或 INT 类型作为我的主键,我的单个示例值的端点将如下所示:
GET "/examples/([0-9]+)*"
但是我使用 UUID 作为主键,我创建了这个怪物:P
GET "/examples/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[0-9a-f][0-9a-f]{3}-[0-9a-f]{12})"
使用示例:
examples/ef935fbc-8c43-4b22-b160-14124a29312e
examples/{uuid}
它适用于我的情况,但可能有更好的方法吗?是否有任何好的指导方针来说明如何处理此类问题?
解决方案
就REST而言,使用 UUID 的字符串表示形式作为路径段的一部分是可以的。这只是文字。由于 REST 客户端只遵循服务器提供给它们的链接,因此使用什么拼写并不重要。
有些选择会更容易让您的路由框架管理,但您对路由的选择是一个实现细节,与您的 API 的使用者无关。
使用框架进行粗粒度路由,然后自己实现细粒度控制并没有什么问题
GET /examples/{data}
if (isUUID(data)):
// cast the data to an id yourself, then do the right thing
if "the-other-thing" == data:
// do the other thing
推荐阅读
- ios - “kCGContextTypeIOSurface”类型的 CGContext
- python - 我如何使用简单的 python if 语句从诸如 kill、gun 之类的单词中过滤输入结果
- java - Android Intent, Action Create Document, 多次打开文件资源管理器创建重复的0b文件
- php - 无法使用 php 7.2.5 在 Centos 服务器上运行 php-CURL
- css - 跨浏览器不一致
- wordpress - 保存帖子后如何强制 WordPress Gutenberg 更新特色图片?
- sockets - `struct sockaddr` 的大小
- jestjs - 如何测试函数在 react-testing-library 中返回 jsx?
- css - CSS打开侧面板在Angular组件中不起作用
- python - 集群地理位置(经度/纬度)在 30 分钟内相互通勤?