如何在Rails REST API中使用外部提供的ID?

时间:2012-11-28 16:41:19

标签: ruby-on-rails api rest

在REST API中,特别是在Rails中,使用外部ID的最佳做法是什么?


一些背景:

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

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

到目前为止很标准。

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

我想我可以简单地添加一个external_id参数,并通过external_id添加路由到update / delete / index。然而,这似乎使优雅的基于资源的rails方法变得混乱。

那么,最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

我认为这很好。另一个类似的案例是创建一个" slug"或者"友好的网址"对于替换不太友好的ID的URL("增强"是比替换更好的单词)。只要external_id是不可变的,在其范围内是唯一的,URL安全的等等,它等同于ID。但是,因为它是一个外部价值,您需要与您的客户确认它是不可变的;虽然有可能让它发生变化,但还需要做很多工作来处理价值变化(特别是如果它是URL的一部分)。

如果你想取代Rails'找到使用external_id的方法,使用method_missing来重新定义id - 有一些例子可以通过谷歌搜索" rails 3 slug method_missing"和类似的。

答案 1 :(得分:1)

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

http://example.com/states/4323454

就像

http://example.com/states/washington