【问题标题】:UUID as primary key - REST API guidelineUUID 作为主键 - REST API 指南
【发布时间】:2018-12-21 15:56:53
【问题描述】:

在 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}

它适用于我的情况,但可能有更好的方法吗? 是否有任何好的指导方针来说明如何处理此类问题?

【问题讨论】:

  • 我们这里是在讨论验证吗?如果不是,只需告诉您的用户这是一个字符串?我看不出问题出在哪里。
  • 是的,我应该在方法中输入的 uuid 到达数据库之前以某种方式检查它,还是我创建的正则表达式足够?

标签: rest api uuid endpoint


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多