2013-04-24 34 views
1

我爲搜索用戶提供了REST方法。現在,我有以下簽名的REST方法:通過DTO獲取REST中的GET請求

MyResponse GetUsers(UserSearchDTO search, int pageno, int totalrecords); 

即它是一個接受對象的UserSearchDTO,幫您做生意和總記錄PARAM。該網址會像

myapp/users?pageno={pageno}&totalrecords={totalrecords} 

最終客戶端會發送「PUT」請求這樣的服務:

myapp/users?pageno=1&totalrecords=10,並與它一起將通過XML數據發佈UserSearchDTO像

<UserSearchDTO><Department>d</Department><Name>abc</Name></UserSearchDTO> 

這是一個很好的架構,即爲了讓用戶使用「PUT」請求類型。這樣做的原因是因爲最終客戶端必須以xml形式傳遞UserSearchDTO?

這我想是純粹的另一種方法「GET」的,即不是使用UserSearchDTO我應具有以下特徵:

MyResponse GetUsers(string department,string name,...., int pageno, int totalrecords); 

和最終客戶將調用它像: MYAPP /用戶?部門= d &名= ABC & ...... &您做生意= 1個&總記錄= 10

+0

pageno和totalrecords都是int類型,即它們只接受整數。 – 2013-04-24 17:27:50

回答

0

我在寫我的第一個REST服務的過程,所以我不是專家,但在我看來,我認爲最好使用GET請求,因爲這正是你正在做的 - 從服務器獲取數據。這將使其他開發人員更容易支持該應用程序,而不是試圖弄清楚爲什麼使用PUT進行基本數據檢索。

如果可能,我建議您嘗試在客戶端上將UserSearchDTO XML作爲字符串進行投射,並將其作爲字符串傳遞給GetUsers方法,然後將該字符串加載到服務器上的XmlDocument()中,並將其解析爲DTO。然後你的方法簽名會看起來像:

MyResponse GetUsers(string userSearchXmlString, int pageno, int totalrecords); 
+0

請不要發送XML作爲uri的一部分..這是錯誤的。而是使用單個查詢參數,並且不要添加太複雜的內容。這不是GET操作在RESTful服務中的作用。 – user1908061 2013-04-24 17:45:42

+1

「這只是錯誤的......」......請詳細說明一下嗎? – kmdsax 2013-04-24 17:50:54

0

它看起來像你使用WCF REST。使用WCF REST,你必須自己實現查詢機制,就像你正在嘗試的那樣。你有沒有考慮過使用ASP.NET Web API?在Web API中,您的GetUsers()方法只需返回一個IQueryable<User>和Web API封裝,並使用OData querying capability處理投影,過濾,排序,聚合和分頁。