2016-04-05 54 views
1

我在Rails中編寫了一個API來從多個運營商獲取包的價格。從尺寸,重量,地址和地址等方面對包進行了全面描述。每個承運人都會有具體的細節(FedEx:賬號,包裹選項; USPS:機加工性,預處理; UPS:通知細節等)。我仍在決定是應該在本地存儲價格還是從官方API中檢索價格。嵌套的非資源性路由的最佳API設計

我的第一個問題是關於價格資源。我有一個價格模型,但它不是繼承自ActiveRecord,因爲我沒有價格表。我認爲我的網址看起來像/api/v1 /價格,並且需要像{ "length" : 1.0, "address_from" : ... }這樣的有效載荷。這應該是POST還是GET?我在猜測一個GET,因爲我實際上沒有創建資源,但我不確定。

我的第二個問題是關於有效載荷。我應該嵌套運營商特定的數據嗎?換句話說,哪種方式看起來更加正確(從RESTful的角度和從易用的角度來看)?
選項1:

{ "length" : 1.0, ..., "carrier" : { "name" : "FedEx", "account_number" : "123ABC", "package_options" : "XXX", ... } } 

選項2:

{ "length" : 1.0, ..., "carrier" : "FedEx", "fedex_account_number" : "123ABC", "fedex_package_options" : "XXX", ... } 

如果它是選項1,我應該創建某種資源嵌套的,我應該改變我的網址構建?

+0

(1)GET(2)絕對不是第2個。我很困惑 - 你爲什麼不存儲價格?如果您的假設是價格變化,並且您將始終獲得最新的信息,您將需要初始價格 – timpone

+0

只是爲了澄清,我將存儲價格,並且我不會包裝API調用。 –

回答

1

我仍在決定是應該在本地存儲價格還是從官方API中檢索它們。

真的很好的問題。如果價格在未來發生變化會怎樣?您的應用是否取決於API調用時的價格?如果是這樣,您應該將其存儲在本地,因爲價格可能因API調用和API調用而異。如果有疑問,我會存儲這個值,以便稍後爲審計目的準備一份文件。

我同意/api/v1/prices應該得到一個GET請求,因爲您不是在數據庫或遠程服務/ API上創建資源。但是,這是單數還是複數資源?如果它是單數,你應該考慮使用/api/v1/price。無論您是將價格編號作爲網址的一部分還是作爲額外參數取決於您。

我更喜歡選項1的樣式,因爲JSON格式保留了底層的模型關係。這並不便於使用,而且也是「自我描述」,因爲數據的格式也傳達它的結構。它也不需要解析JSON密鑰。