2013-01-14 35 views
0

當我有一個資源,比方說customers/3返回客戶對象,我想返回不同的領域,或者一些其他的變化這個對象(例如比方說,我需要有客戶對象包括:也是他最近的購買(爲了速度,我不想做2個不同的查詢))。的不同體現

在我看來我的選擇是:

  • customers/3/with-latest-purchase
  • customers/3?display=with-latest-purchase

在第一個選項有不同的URI的新的表述,但這真的需要?另外我如何告訴客戶端這個URI存在?

在第二個選項有GET參數告訴返回什麼樣的表示的服務器。 URI參數可以通過OPTIONS方法解釋,並且更容易告訴客戶在哪裏查找數據,因爲所有的表示都在同一個地方。

所以我的問題是,這些是更好(更REST風格)和/或者是有一些更好的方式來做到這一點,我不知道?

+1

兩者都是不同的URI –

回答

1

我認爲什麼是最好的定義原子,不可分割的服務對象,例如customercustomer-latest-purchase,很好,乾淨,簡單。然後,如果客戶想要一個客戶購買他最新的產品,他們就會調用這兩個服務調用,而不是用時髦的參數將其全部整合在一起。

對象的不同表述是確定在Java中通過接口,但我認爲這是一個休息的好主意,因爲它損害它的簡單。

+0

但據我所知,最好的做法是將更多資源合併爲一個以減少請求數量... –

+0

我不會這樣做。它可能是一個小代碼清潔度和簡單性的增強 – amphibient

0

有一種誤解,認爲使查詢參數看起來像文件路徑更加RESTful的。當確定一個不同的URI時,地址的查詢部分被包括在內,所以第二個選項很好。

在包含所有客戶GET請求中的最新購買數據方面是否有很大的性能下降?如果沒有,最簡單的事情就是這樣做,這樣就不會有怪異的URL參數或雙重請求。如果獲得最新的訂單是一項重大的困難(它可能不應該是這樣),那麼在查詢字符串中添加一個標誌來包含它就沒有問題。