如何在 RESTful API 中管理 public 和私有资源

How to manage public and private resource in a RESTful API

我有一个资源有一个 public 和一个私人回复,只有一些处于决定性情况的用户可以访问私人回复。

最好的实施方式是什么?

  1. 两个 url,一个用于 public,另一个用于私人:resource/{id}resource/{id}/private
  2. 相同 url,每个用户的不同响应:resource/{id}
  3. 与 url 相同,但 public 和私有参数不同:resource/{id}?private=true
  4. 其他?

IMO 一个 resource 应该只有一个 URL。您可以在 HTTP 中使用 auth-token 来检查服务器是否应以 private 响应或 public 响应进行响应。此外,如果某些用户正在请求某些未经授权的资源,您可以发送 4xx 状态。

因此 resource/{id} 似乎是个不错的选择。

你的术语有点混乱。您有一个资源和多个 representation。该资源应具有一个规范位置 (URL)。不同的用户根据他们的授权级别获得不同的表示是完全没问题的。

如果您希望用户能够请求资源的特定表示,您有两种选择。如果您使用自定义 MIME 类型,Accept header 将是最佳选择。如果您不使用自定义 MIME 类型,查询参数是您最好的选择,但要确保它在整个应用程序中是通用的和一致的。不要只使用 ?private=true,而是使用 ?representation=public 之类的东西。这允许您稍后添加表示并使用相同的参数,并与需要指定表示的其他资源共享相同的查询参数。您应该避免使用单独的 URL.