REST:处理部分受限资源的正确方式



我正在为我构建的一个小型SaaS重新设计REST API。目前有一条路由/entries不需要任何身份验证。但是,如果客户端使用足够的权限进行身份验证,服务器将发送额外的信息(例如:与每个条目相关联的帐户)。

我看到的主要问题是,客户端试图以不足的权限请求受保护的数据仍然会收到200响应,但没有预期的数据,而不是401 Unauthorized。

我想到的替代方案是:

  1. 将端点拆分为两个端点,例如/entries/admin/entries。这种方法的问题在于,本质上相同的资源现在有两个不同的端点。然而,它的优点是易于用OpenAPI编写文档。(此外,它允许添加/entries/:id/account端点。)

  2. 接受查询参数?admin=true。这个选项更难记录。另一方面,它避免了对单个条目使用多个uri。

有一个标准的方法来构建这样的东西吗?

相关问题:相同资源的不同RESTful表示

我想到的替代方案是

请注意,就HTTP/REST而言,您的两个替代方案是相同的:在这两种情况下,您都引入了一个新的资源。

在一种情况下,你使用路径段来区分两个标识符,在另一种情况下,你使用查询部分,这并不能改变你有两个资源的事实。


拥有两个具有相同信息的资源很好-想象两个基于相同信息构建的网页。

这是一种权衡——HTTP应用程序不知道这些资源有共同的信息,因此不知道使一个缓存资源无效也会使另一个缓存资源无效。所以就像网页一样,你可能会遇到缓存中的表示不一致的情况。

有时候,正确的答案是使用不同资源之间的链接——有"信息在一个地方,其他地方都有链接,让你找到那个地方。再次,权衡。

HTTP不是一个无限灵活的应用协议。它非常擅长通过网络传输文档,尤其是在"网络规模"下。

已经有人尝试使用链接头来触发其他缓存资源的无效,但据我所知,它们都没有通过提议阶段。