2

一般来说,在 REST API 中使用外部 ID 的最佳实践是什么,特别是在 Rails 中?


一些背景:

我为我的应用程序创建了一个 API,它使用基于标准资源的 JSON REST API。

我有一个 Flight 模型,用户可以通过它通过 POST 到 /api/flights 创建模型对象。这会像 ActiveRecord 一样为新的 Flight 对象分配一个唯一的 id。

到目前为止相当标准。

但是,我的客户希望我提供一个选项,在 API 中创建 Flight 对象时自己分配一个 id,然后使用他分配的 id 来显示/更新/删除(等)对象通过 API。

我想我可以简单地添加一个 external_id 参数并通过 external_id 添加路由来更新/删除/索引。然而,这似乎使优雅的基于资源的 Rails 方法变得混乱。

那么,最佳实践是什么?

4

2 回答 2

2

我认为这很好。另一个类似的情况是为替换不太友好的 ID 的 URL 创建一个“slug”或“友好的 url”(“augments”是一个比替换更好的词)。只要external_id是不可变的、在其范围内唯一、URL 安全等,它就等同于 ID。但是,因为它是一个外部值,所以您需要与您的客户确认它是不可变的;虽然可以更改它,但处理更改值需要做很多工作(特别是如果它是 URL 的一部分)。

如果您想替换 Rails 的 find 方法以使用 external_id,请使用method_missing重新定义 id - 通过谷歌搜索“rails 3 slug method_missing”和类似内容可以找到相关示例。

于 2012-11-28T16:52:37.983 回答
1

我不确定这是否有帮助,但您可以检查 gem友好的 id,您可以为该 gem 指定 external_id,然后它将处理请求

http://example.com/states/4323454

像是

http://example.com/states/washington
于 2013-11-22T17:46:02.463 回答