1

我想以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 上编码,但我真的在问原理和设计,而不是实现。

我的问题:表示“我的”Items 的三种方式中,哪一种最符合 RESTful 设计理念?要求“我的”物品本身是否合法?

4

2 回答 2

2

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

如果用户可以看到所有项目,并且您只想获取属于特定用户的项目,那么您应该参数化对 GET /Item 的调用。像 GET /Item/?owner=42 这样的东西。在这种情况下,用户不限于询问他们的物品..他们可以询问任何所有者的物品。这为他们购买了灵活性,而不会花费您任何费用。

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

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

于 2013-08-05T19:04:23.773 回答
1

我会GET /Items用来获取所有项目。

GET /Items?owner=42

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

GET /MyItem似乎没有必要,因为可以使用其他 REST url 路径检索您正在寻找的资源。

于 2013-08-05T19:02:04.033 回答