2012-11-28 52 views
2

通常在REST API中使用外部ID的最佳做法是什麼,特別是在Rails中?如何在Rails REST API中使用外部提供的ID?


一些背景:

我創建了一個API,我的應用程序,它使用基於標準的資源JSON REST API。

我有一個飛行模式,由用戶通過張貼到/ API /航班創建模型對象。這將按照ActiveRecord始終執行的方式爲新的Flight對象分配一個唯一的ID。

到目前爲止相當標準。

但是,我的客戶希望我提供一個選項,讓他自己分配一個ID作爲API中創建Flight對象的一部分,並稍後使用他分配的ID來顯示/更新/刪除(etc )通過API的對象。

我想我可以簡單地添加一個EXTERNAL_ID參數和添加路由更新/由EXTERNAL_ID刪除/指數。然而,這似乎混淆了優雅的基於資源的rails方法。

那麼,最佳做法是什麼?

回答

2

我認爲這很好。另一個類似的情況是爲URL替換較不友好的ID(「增補」比替換更好的詞)而創建「slug」或「友好URL」。只要external_id是不可變的,在其範圍內是唯一的,URL安全等等,就相當於ID。但是,由於它是外部價值,因此您需要向客戶確認它是不可變的;儘管可能會改變它,但需要處理更改值的大量工作(特別是如果它是URL的一部分)。

如果您想要替換Rails的find方法來代替使用external_id,請使用method_missing來重新定義id--這裏有一些使用googling「rails 3 slug method_missing」和類似方法的例子。

+0

現在常見的另一種方法是讓客戶端在REST API的早期請求中查找ID,或許緩存它們,並在隨後的請求中傳遞它們。 –

1

我不知道這是否可以幫助,但你可以檢查friendly id你可以指定EXTERNAL_ID這種寶石那麼它會處理請求

寶石
http://example.com/states/4323454 

要像

http://example.com/states/washington