我想这可能是一个简单的问题,但我看到了相互矛盾的答案。
我正在构建一个返回类对象的 restful web api 服务。除了能够像这样请求所有项目、一个项目或类别之外:
http://MyService/Category/Blues
我还希望能够让用户能够选择多个,例如:
http://MyService/Albums/12345,77777,87654
http://MyService/Category/Blues,Pop,Metal
我不需要上面显示的语法,那只是一个例子。
我已经通过创建如下代码实现了这一点:
[Route("Albums/Category/{categoryList}")]
public List<Album> GetAlbumsByCategory(string categoryList)
{
int[] cats = categoryList.Split(',');
return(AlbumManager.GetAlbums(cats));
}
这工作正常,但用户需要知道输入可以是单个值,也可以是逗号值列表。然后在我的 AlbumManager 中遍历专辑集合并仅将选定的项目添加到新列表中。
我想知道:
(A) REST 中是否已经存在快捷方式以及执行此操作的首选方法?我看过 Category=Blues&Category=Pop& 的一些建议 ..... 对我来说似乎很冗长,但如果有标准的话我想使用它。
(B) 当我使用我的方法时,我不断地在各处编写拆分代码。 REST 中是否有简化此操作的快捷方式?我看过一些 [FromUri] 引用资料,但我不清楚。
最佳答案
一个)。在精确推荐的方法上休息有点放松,基本上你有 3 个选项。没有一个比另一个更“RESTful”,选择最适合您的 API 用户的那个 - 这可能与适合您自己的不同,毕竟 API 用户也是用户:-)。
1).实现一个自定义 ActionFilter,这将使您免于拆分代码,请参阅有关此问题的多个答案 https://stackoverflow.com/a/19107738/1422377
2).听起来“违反原则”,发送一个 POST 请求,该请求接受正文中的列表。是的,最纯粹的人可能会争辩说,除非您正在修改数据,否则这不应该构成帖子,但要记住用户。
3).稍微修改您当前的方法,使 API 用户更清楚他们期望输入的内容。例如:
public List<Album> GetAlbumsByCategory([FromUri] string[] categoryList)
{
//your code here
}
就您个人而言,在您的情况下,我会选择选项 3 - 尽管冗长的语法对于任何 API 用户来说都很熟悉,然后是选项 1。如果您有更复杂的输入模型,请选择选项 2。正如我所说没有一个比另一个更 RESTful。
关于rest - 网络 API/REST : Request list of items,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927625/