2012-05-29 34 views
2

everyone =) 我是休息服務的新手,所以我不確定某些功能是否可行。 例如,我有一個項目列表和許多方法來過濾那些在刪除到客戶端應用程序之前。 我使用.netlinq & wcf其餘服務與json返回格式。 方式過濾列表:有很多條件的休息服務

.../Items/RecentOnes 
.../Items/FilteredByDate 
.../Items/ItemsWithCrashID('CrashId') 
.../Items/ItemsWithValue('Value') 

等 我需要這些過濾器在一個查詢中被調用。像

.../Items/ItemsWithValue('Value')/RecentOnes/FilteredByDate 

.../Items/FilteredByDate/ItemsWithCrashID('CrashID')/Recent 

和其他14種可能組合。 (正如你看到的,過濾器的順序應該沒有關係)

我的問題是 - 是否有可能以某種方式編寫這4個服務,使所有這些組合工作?

還是這樣做的唯一方法是寫一個單一的服務有4個參數,可以像

.../Items?recentOnes=true&FIlteredByDate=false&CrashID=&Value=somevalue ? 

在此先感謝=)

+0

使用REST的優點之一是能夠根據服務方法參數來格式化URL。所以,最新的格式看起來「RESTful」。如果你想使用多個過濾器,你可以使用一個條件對象,並將字符串表示形式傳遞給服務:'../ Items?condString = {condString}'。條件對象可以具有像過濾器名稱,值,比較運算符,否定和子條件列表等屬性。父條件通過邏輯運算符('AND','OR')與子條件鏈接。 –

回答

2

有趣的問題!作爲RESTful Web服務使用URL作爲資源表示,e.g:

.../items   =>    get all items 
.../items/1  =>    get an item which id == 1 
.../items/1/edit =>    edit an item which id == 1 
.../items?value='computer' =>  get all items which value == 'computer' 

,所以你可以看到你的網址:

.../Items/ItemsWithValue('Value')... 

它不表示任何特定資源的。看起來你正在尋找一些項目,這是按價值過濾。這就像搜索。所以你的第二個選擇是更好的,使用任何你想過濾的查詢字符串。

+0

感謝您的回覆=) – Vital

+0

不客氣...... :) –