1

我有一个用于搜索用户的 REST 方法。现在我有以下 REST 方法的签名:

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

即它接受一个对象UserSearchDTO,pageno 和 totalrecords 参数。URL 看起来像

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

最终客户端将为此服务发送“PUT”请求,例如:

myapp/users?pageno=1&totalrecords=10并随之传递 UserSearchDTO 发布的 xml 数据,例如

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

这是一个好的架构吗,即为了让用户使用“PUT”请求类型。这样做的原因是因为最终客户端必须以 xml 形式传递 UserSearchDTO?

我在想的另一种方法是纯“GET”,即不使用UserSearchDTO我应该有以下签名:

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

最终客户端会这样称呼它:myapp/users?department=d&name=abc&......&pageno=1&totalrecords=10

4

2 回答 2

0

我正在编写我的第一个 REST 服务,所以我不是专家,但在我看来,我认为最好使用 GET 请求,因为这正是你正在做的——从服务器获取数据. 这将使其他开发人员更容易支持该应用程序,而不是试图找出您为什么使用 PUT 进行基本数据检索。

如果可能,我建议您尝试将 UserSearchDTO XML 转换为客户端上的字符串并将其作为字符串传递给 GetUsers 方法,然后将该字符串加载到服务器上的 XmlDocument() 中并将其解析为 DTO。然后您的方法签名将如下所示:

MyResponse GetUsers(string userSearchXmlString, int pageno, int totalrecords);
于 2013-04-24T17:33:38.500 回答
0

看起来您正在使用 WCF REST。使用 WCF REST,您必须自己实现查询机制,就像您尝试做的那样。您是否考虑过使用 ASP.NET Web API?在 Web API 中,您的GetUsers()方法只需要返回一个IQueryable<User>并且 Web API 使用OData 查询功能包装它,该功能可以为您处理投影、过滤、排序、聚合和分页。

于 2013-04-24T17:46:30.427 回答