2012-07-03 36 views
3

我正在設計一個REST風格的服務。它列出一組數據。主要問題是該集合沒有合理的單一標識符。在系統的知識範圍內,也不能輕易計算出特定的集合。因此,似乎無法獲得GET/items/{identifier}服務。使用多個ID設計REST風格的服務

我確實有要求的每個元素的ID。我的主要問題是,在URI中列出id不是RESTful(例如GET items/{id1},{id2},...,{idn})。對?

我可以看到DELETE具有類似的用例 - 在一個請求週期中刪除多個項目。

在REST領域內如何滿足這樣的用例?那可能嗎?

+1

語法什麼的RESTful約束你關心的操作||模型? URI只是遵循RFC 3986中規定的規則的標識符。就我個人而言,使用逗號分隔值列表作爲URI標識符的一部分看起來沒有問題。 –

回答

0

問題中提到的方法實際上意味着對於ids的每個組合都有一個資源。比方說,我們有2 ids:1和2

/items/1,2 

/items/2,1 

上述代表不同的資源,雖然結果是一樣的。 這可能會讓API的使用者感到困惑。

模型化的另一種方法是通過查詢參數作爲過濾語義。 我們假設,id實際上是資源的一個字段。

例如,獲取item通過id 1:

GET 
/items/1 

Response: 

{ 
    "id": 1, 
    "type": "table", 
    "color": "black", 
    ... 
} 

所以現在的問題是,如果我有什麼需要得到幾個項目作爲散裝? 您可以將此問題概括爲根據某些字段上的值過濾items的常見問題。 例如: - 讓所有類型

GET 
/items?query="name='table'" 

Response: 
{ 
    "data": [ 
     { 
      "id": 1, 
      "type": "table", 
      "color": "black", 
      ... 
     }, 
     { 
      "id": 2, 
      "type": "table", 
      "color": "grey", 
      ... 
     }, 
     { 
      "id": 6, 
      "type": "table", 
      "color": "brown", 
      ... 
     } 
    ] 
} 

items所以同樣的問題可以問得到items其中id12。 比方說,我們在query

GET 
/items?query="id=1||id=2" 

Response: 
{ 
    "data": [ 
     { 
      "id": 1, 
      "type": "table", 
      "color": "black", 
      ... 
     }, 
     { 
      "id": 2, 
      "type": "table", 
      "color": "grey", 
      ... 
     } 
    ] 
}