用于选择“我的”项目的RESTful URI

时间:2013-08-05 18:11:56

标签: rest asp.net-web-api

我希望以这些方式公开我的Item资源:

GET /Item (to show all Items)
GET /Item/401 (to show only the Item with key value 401)

到目前为止一切顺利。现在只请求属于我的项目,我可以想到这些可能的URI构造:

GET /Item/Mine
GET /MyItem
GET /Item/owner=42 (where my ID is 42)

我不喜欢最后一个,因为它简化了我的客户端编程,依靠现有的身份验证来找出“我的”ID。我碰巧在ASP.NET WebAPI上编码,但我真的在询问原理和设计,而不是实现。

我的问题:表示“我的”项目的三种方式中哪一种与RESTful设计概念最为一致?要求“我的”项目是否合法?

2 个答案:

答案 0 :(得分:2)

如果用户不能看到不是“他们”的项目,那么这是一个授权问题。只需使用GET / Item,并让您的授权模块删除不属于他们的项目。

如果用户可以查看所有项目,并且您只想获取属于特定用户的项目,那么您应该参与调用GET / Item。比如GET / Item /?owner = 42。在这种情况下,用户不仅限于询问他们的物品......他们可以要求任何所有者的物品。这会给他们带来灵活性而不会让你付出任何代价。

如果您有/ User资源,您还可以添加端点/ User / {id} / Item 返回与/ Item /?owner =

相同的集合

这并不是密切关系,但我发现复数集合(/ Items,/ Users)比单数集更好。 YMMV。

答案 1 :(得分:1)

我会使用GET /Items获取所有主题。

GET /Items?owner=42

GET /Item/Mine不一致,因为它与您识别资源的方式相矛盾,即GET /Item/401

似乎没有必要使用

GET /MyItem,因为可以使用其他REST网址路径检索您要查找的资源。