如何在restful api中检查他或她对特定资源的访问?

如何在restful api中检查他或她对特定资源的访问?,rest,Rest,假设我们有资源:api/v1/cars/{id} 一个人如何才能真正知道他或她是否可以访问这个特定的资源api/v1/auth/cars/{id}?首先,最好有别的东西,而不是仅仅为了在一个角度应用程序中浏览而利用资源(我完全承认这一点),比如在ASP.NET中使用Identity framework 无论如何回到正题,我列出了一些解决方案 获取api/v1/cars/{id}并利用错误代码 HEADapi/v1/cars/{id}仍然利用错误代码,而不传输整个主体 选项api/v1/cars

假设我们有资源:
api/v1/cars/{id}


一个人如何才能真正知道他或她是否可以访问这个特定的资源
api/v1/auth/cars/{id}

首先,最好有别的东西,而不是仅仅为了在一个角度应用程序中浏览而利用资源(我完全承认这一点),比如在ASP.NET中使用Identity framework

无论如何回到正题,我列出了一些解决方案

  • 获取
    api/v1/cars/{id}
    并利用错误代码
  • HEAD
    api/v1/cars/{id}
    仍然利用错误代码,而不传输整个主体
  • 选项
    api/v1/cars/{id}
    (有点扭曲,但不返回错误),以了解是否实际可获取
  • 另一种资源,例如。
    • 获取
      api/v1/cars/{id}/authorized
    • 获取
      api/v1/auth/me/cars/{entityId}

我最终使用了第一个解决方案,并在Angular应用程序中使用了resolve guard,这是实现该解决方案的最“标准”的方式,尽管我个人觉得这很难看。

只需将请求发送到端点即可。如果您不被允许,相应的错误响应将告诉您不允许访问资源anyway@RomanVottner你不觉得如果你有机会,您可能会免费下载数据,然后向同一URI发送请求……HTTP的核心只是一个允许通过internet管理资源的协议。从文档管理中推断出的任何业务规则都只是文档管理本身的副作用。REST并不是关于漂亮的URI,而是关于通过将重点放在定义良好的媒体类型上,让服务器在响应中提供客户端所需的任何信息,包括客户端可以通过查找附带的链接关系名称的含义来调用的链接,从而实现客户端和服务器的解耦。如果纯粹的性能是您的问题,那么REST不是您的最佳选择!你从这样的“资源”中获得了什么是值得怀疑的。是什么阻止您首先检查是否允许用户执行生成并在所有处理之前返回错误?客户机通常对数据是否已经位于其自己的文件中、是否是db条目或是否需要通过调用其他服务来计算不感兴趣。它只是对最终结果感兴趣。如果你需要事先处理一些数据,这只是一些内部细节。如何以RESTful方式实现它,最好的建议之一可能是:如何为web页面实现它?