如何在 RESTful API 中管理 public 和私有资源
How to manage public and private resource in a RESTful API
我有一个资源有一个 public 和一个私人回复,只有一些处于决定性情况的用户可以访问私人回复。
最好的实施方式是什么?
- 两个 url,一个用于 public,另一个用于私人:
resource/{id}
和 resource/{id}/private
。
- 相同 url,每个用户的不同响应:
resource/{id}
。
- 与 url 相同,但 public 和私有参数不同:
resource/{id}?private=true
。
- 其他?
IMO 一个 resource
应该只有一个 URL。您可以在 HTTP 中使用 auth-token 来检查服务器是否应以 private
响应或 public
响应进行响应。此外,如果某些用户正在请求某些未经授权的资源,您可以发送 4xx
状态。
因此 resource/{id}
似乎是个不错的选择。
你的术语有点混乱。您有一个资源和多个 representation
。该资源应具有一个规范位置 (URL)。不同的用户根据他们的授权级别获得不同的表示是完全没问题的。
如果您希望用户能够请求资源的特定表示,您有两种选择。如果您使用自定义 MIME 类型,Accept
header 将是最佳选择。如果您不使用自定义 MIME 类型,查询参数是您最好的选择,但要确保它在整个应用程序中是通用的和一致的。不要只使用 ?private=true
,而是使用 ?representation=public
之类的东西。这允许您稍后添加表示并使用相同的参数,并与需要指定表示的其他资源共享相同的查询参数。您应该避免使用单独的 URL.
我有一个资源有一个 public 和一个私人回复,只有一些处于决定性情况的用户可以访问私人回复。
最好的实施方式是什么?
- 两个 url,一个用于 public,另一个用于私人:
resource/{id}
和resource/{id}/private
。 - 相同 url,每个用户的不同响应:
resource/{id}
。 - 与 url 相同,但 public 和私有参数不同:
resource/{id}?private=true
。 - 其他?
IMO 一个 resource
应该只有一个 URL。您可以在 HTTP 中使用 auth-token 来检查服务器是否应以 private
响应或 public
响应进行响应。此外,如果某些用户正在请求某些未经授权的资源,您可以发送 4xx
状态。
因此 resource/{id}
似乎是个不错的选择。
你的术语有点混乱。您有一个资源和多个 representation
。该资源应具有一个规范位置 (URL)。不同的用户根据他们的授权级别获得不同的表示是完全没问题的。
如果您希望用户能够请求资源的特定表示,您有两种选择。如果您使用自定义 MIME 类型,Accept
header 将是最佳选择。如果您不使用自定义 MIME 类型,查询参数是您最好的选择,但要确保它在整个应用程序中是通用的和一致的。不要只使用 ?private=true
,而是使用 ?representation=public
之类的东西。这允许您稍后添加表示并使用相同的参数,并与需要指定表示的其他资源共享相同的查询参数。您应该避免使用单独的 URL.