2

我的 RESTful API 始终具有身份验证功能,因此所有调用都针对特定用户进行了身份验证。

哪个是通过 HTTP 协议更好的 RESTful URL 设计?请记住,用户 id 3 已经通过基本的 http auth/digest 进行了身份验证。

http://server.com/users/3/widgets/ (返回用户 ID 3 的所有小部件)
http://server.com/users/3/widgets/13 (返回小部件 ID 13)

或者:

http://server.com/widgets/ (返回用户 ID 3 的所有小部件)
http://server.com//widgets/13 (返回小部件 ID 13)

总是有一个唯一的 URL 会更好http://server.com/users/3/widgets/吗?甚至知道只有用户 #3 将是唯一访问它的人?在每次调用时重新指定 /user/3 是否是多余的http://server.com/users/3/widgets/

4

3 回答 3

2

我肯定会推荐第一个选项。如果您选择第二个并且在某些时候您决定要允许缓存,那么您必须确保您的可变标头指定表示在授权标头上有所不同。如果您使用过期的身份验证令牌,这可能会很痛苦。

这也意味着,如果您希望允许用户查看其他用户的小部件,您可以并且缓存仍然有效。

于 2011-03-07T20:50:48.033 回答
0

REST 在技术上应该是无状态的,因此更“正确”的实现将是您列出的第一种方式。

但是,我会做的事情与您建议的第一种方法略有不同——用户返回的有关特定小部件的信息会根据用户而改变吗?如果没有,您可能想试试这个:

http://server.com/users/3/widgets/ (Returns all widgets for user id 3)
http://server.com/widgets/13 (Returns widget id 13)

两全其美。正确的“REST-ful”实现,但是当涉及到特定的小部件时,当前用户并不重要。这样,您的客户也可以更轻松地传递单个小部件的查询,而无需自己更新查询。如果客户端不应该有权查看该特定小部件,那么使用您已经拥有的身份验证应该不难防范。

我也是基于这样一个假设,即小部件列表可能因客户端而异——如果这不是真的,并且所有客户端无论如何都会看到相同的小部件列表,则没有理由传递用户,所以选择第二种方式。

于 2011-03-07T21:11:10.913 回答
0

我会选择第一个,因为它确实完全指定了资源。

于 2011-03-07T16:07:08.917 回答