RESTful API 管理员和普通用户访问的最佳做法
RESTful API best practices for admin and normal user access
必须创建一个 RESTful 具有管理员和普通用户访问资源(比如说汽车)的 Web 服务,我想将用户的 Uri 构造为:
http://myhost/users/5/cars/2
但作为管理员用户,我想访问所有汽车,例如:
http://myhost/cars/51
与我提议的第一个不同,您认为汽车只使用一个 Uri 更好吗,对用户使用过滤器,例如:
http://myhost/cars/?user=5
不要为同一资源设置 2 个不同的 Uris?您还有其他建议吗?
用户标识符不应是 uri 的一部分,因为检索资源的用户与正在检索的资源无关。当资源之间存在父子关系时,通常将它们包含在 uri 中。
在您的案例中,用户对资源的访问权限应从他们随请求发送的授权令牌中推断出来。
以下两个URL都很好,即使对于管理员甚至对于普通用户也是如此。 Auth-token 应该在 HTTP 会话中,所以服务器应该能够检测请求者是否是管理员。
http://myhost/cars
returns汽车合集。建议对退回的汽车进行授权过滤。如果我是管理员,我可以看到所有汽车。如果我是用户#5,那么我可能只能看到我的车。所以管理员和普通用户都可以使用相同的 URL.
在 http://myhost/cars/?user=5
的情况下,如果我对用户 #5 的汽车感兴趣,即使我是其他人,也会应用显式过滤器。可能我得到一个空列表,因为我无权查看任何项目。这个URL也行
http://myhost/cars/51
表示我想直接访问#51 车。不管我是不是管理员都没关系。如果我无权查看此实体,我可能会收到一条 4XX 消息(XX 是什么是另一回事)。
必须创建一个 RESTful 具有管理员和普通用户访问资源(比如说汽车)的 Web 服务,我想将用户的 Uri 构造为:
http://myhost/users/5/cars/2
但作为管理员用户,我想访问所有汽车,例如:
http://myhost/cars/51
与我提议的第一个不同,您认为汽车只使用一个 Uri 更好吗,对用户使用过滤器,例如:
http://myhost/cars/?user=5
不要为同一资源设置 2 个不同的 Uris?您还有其他建议吗?
用户标识符不应是 uri 的一部分,因为检索资源的用户与正在检索的资源无关。当资源之间存在父子关系时,通常将它们包含在 uri 中。
在您的案例中,用户对资源的访问权限应从他们随请求发送的授权令牌中推断出来。
以下两个URL都很好,即使对于管理员甚至对于普通用户也是如此。 Auth-token 应该在 HTTP 会话中,所以服务器应该能够检测请求者是否是管理员。
http://myhost/cars
returns汽车合集。建议对退回的汽车进行授权过滤。如果我是管理员,我可以看到所有汽车。如果我是用户#5,那么我可能只能看到我的车。所以管理员和普通用户都可以使用相同的 URL.
在 http://myhost/cars/?user=5
的情况下,如果我对用户 #5 的汽车感兴趣,即使我是其他人,也会应用显式过滤器。可能我得到一个空列表,因为我无权查看任何项目。这个URL也行
http://myhost/cars/51
表示我想直接访问#51 车。不管我是不是管理员都没关系。如果我无权查看此实体,我可能会收到一条 4XX 消息(XX 是什么是另一回事)。