UUID作为主键-REST API指南

时间:2018-12-21 15:56:53

标签: rest api uuid endpoint

在postgres中,我创建了一个表:

create table examples(id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
                     name VARCHAR);

为了从表示例中获取所有值,我在框架处理程序中创建了一个端点:

GET "/examples[/]?"

如果我使用SERIAL或INT类型作为我的PRIMARY KEY,则单个示例值的端点将如下所示:

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}

在我的情况下有效,但是也许有更好的方法吗? 是否有任何好的准则可以告诉您如何处理此类问题?

1 个答案:

答案 0 :(得分:1)

REST而言,将UUID的字符串表示形式用作路径段的一部分是可以的。这只是文字。由于REST客户端仅遵循服务器提供给他们的链接,所以使用什么拼写真的没关系。

某些选择对于您的 routing 框架来说将更容易管理,但是您选择的路由是实现细节,与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