在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方法变得混乱。
那么,最佳做法是什么?
答案 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