【发布时间】:2015-02-28 07:10:25
【问题描述】:
我正在使用 WebAPI 编写一个 API,虽然我正在从头开始设计它,但我正在尝试使其成为 RESTful。过去在做 Web 服务工作时,我总是使用 RPC 模式(ASMX、SOAP 等)——例如。使用与我想要它做的匹配的任意方法名称。对我来说,这似乎比 REST 更直观、更明确,但鉴于 WebApi 本质上似乎更 RESTful(我知道您可以更改路由,所以它不是),我决定尝试使其成为 RESTful。
我了解(我认为!)基础知识 - 例如。 POST 用于创建,PUT 用于指定 ID 时更新,GET 用于获取,DELETE 用于删除等。
我的困惑是如何处理返回集合与单个对象。例如,假设我有一个名为 UsersController 的 API 控制器。据我所知,我有以下网址:
GET: /api/users (lists all users)
GET: /api/users/1 (lists details about user with ID 1)
POST: /api/users (creates a new user with details sent in the POST data)
PUT: /api/users/1 (updates the existing user with ID 1 with details sent in the POST data)
DELETE: /api/users/1 (deletes the existing user with ID 1)
对于上面的第一个 URL,我还需要发送各种过滤/搜索条件。这个标准是否只是作为查询字符串参数传递?或者我应该为这个“搜索”功能使用完全不同的控制器?例如。用户搜索控制器?如果是这样,在这种情况下应该是 POST 还是仍然是 GET?实际上,当我写这篇文章时,我想知道一个单独的控制器是否有意义,因为我可能希望在 GET 中为单个用户返回比在搜索结果中返回的更多详细信息。如果同一个控制器确实为单个对象 GET 和返回集合的 GET 返回不同的数据,是否会导致它不是 RESTful?
【问题讨论】:
标签: c# web-services rest asp.net-web-api