2014-10-27 73 views
2

假設我有一個「訂單」的集合。 (a)訂單分爲三類:「待定」,「確認」,「已完成」。REST API:嵌套URI可以與ID通過查找共存嗎?

(b)中自然地,訂單可以通過ID

最初我認爲這URI方案的擡頭:

對於(A):

  • GET /orders/:id

對於(b):

  • GET /orders/pending
  • GET /orders/confirmed
  • GET /orders/completed

這種方法的問題是,有一個(非常非常罕見的)機會,訂單將收到的ID爲「待定」(或「證實」或「已完成「),在這種情況下,URI /orders/pending變得不明確。

另一種選擇是使用:GET /orders_pending但這看起來不太優雅。

有什麼建議嗎?

回答

6

立即浮現在腦海中的溶液中使用

GET /orders?category=pending HTTP/1.1 

這工作與查詢,應該很容易在任何服務器上實現。

不應將資源的屬性用作網址段,因爲理想情況下,每個網址段代表資源(或多個),而不是屬性。我想你已經知道,因爲你自己說的

這種方法的問題是,有一個(非常非常罕見) 機會,訂單將收到的ID爲「待定」(或「證實」或 「completed」),在這種情況下,URI/orders/pending變成 不明確的

如果您想根據屬性的值過濾結果,那麼在url中使用查詢是一種方法。

此外,作爲@mahemoff指出

有可能擴大戰果,例如?category = pending & paid = true,並且 您無法真正擴展/訂購/掛起樣式的URL以覆蓋所有 可能的查詢輸入。

+2

這是一個很好的答案,因爲要求是簡單的'/ orders'搜索/過濾器,是所有訂單的列表。有可能在此基礎上,例如?category = pending&paid = true,並且您無法真正擴展/排序/暫掛URL的樣式以覆蓋所有可能的查詢輸入。 – mahemoff 2014-10-27 09:12:44

+1

@mahemoff關於擴展的好處,生病添加:-) – 2014-10-27 09:13:34

相關問題