如何在 HTTP DELETE 请求中传递身份验证详细信息?
How to pass authentication details in a HTTP DELETE request?
我正在尝试按照 HTTP 方法语义创建 REST API,但我无法使用 DELETE 方法。
在我的用例中,该服务位于对用户进行身份验证的网关后面。此服务使用 SSO 令牌,然后使用该令牌对用户进行身份验证并获取其详细信息。从这一点开始,我试图调用我的服务,我在其中使用要删除的资源的 id 作为路径变量,但我不知道如何传递用户的 id 进行验证。
我读过很多关于将 body 添加到 DELETE 方法的问题的帖子。我还认为添加自定义 header 来识别用户不是正确的方法。在我的选择中,我认为只有 2 个是明智的:
- 发出 POST 请求,用户 ID 为 body。我不喜欢这个,因为我基本上是将 POST 与已识别的资源一起使用,并且因为在语义上对我来说听起来不对。
- 发出请求,使用户 ID 成为路径变量。它看起来像这样。 path/to/service/resourceId/{resourceId}/userId/{userId}。我的问题是在 POST 和 PUT 请求中,userId 是 body 的一部分。 API 看起来不一致,但我想我仍然可以更改其他 2 个,因此用户 ID 也是 url.
的一部分
有什么建议吗?
HTTP 身份验证,也许?这就是它的目的,不是吗?请参阅 RFC 7235。
您应该使用 HTTP header 参数来传递用户令牌。
@DELETE
@Path("/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Info deleteInfo(
@HeaderParam("Authorization") String token,
@PathParam("id") Long id){
}
我正在尝试按照 HTTP 方法语义创建 REST API,但我无法使用 DELETE 方法。
在我的用例中,该服务位于对用户进行身份验证的网关后面。此服务使用 SSO 令牌,然后使用该令牌对用户进行身份验证并获取其详细信息。从这一点开始,我试图调用我的服务,我在其中使用要删除的资源的 id 作为路径变量,但我不知道如何传递用户的 id 进行验证。
我读过很多关于将 body 添加到 DELETE 方法的问题的帖子。我还认为添加自定义 header 来识别用户不是正确的方法。在我的选择中,我认为只有 2 个是明智的:
- 发出 POST 请求,用户 ID 为 body。我不喜欢这个,因为我基本上是将 POST 与已识别的资源一起使用,并且因为在语义上对我来说听起来不对。
- 发出请求,使用户 ID 成为路径变量。它看起来像这样。 path/to/service/resourceId/{resourceId}/userId/{userId}。我的问题是在 POST 和 PUT 请求中,userId 是 body 的一部分。 API 看起来不一致,但我想我仍然可以更改其他 2 个,因此用户 ID 也是 url. 的一部分
有什么建议吗?
HTTP 身份验证,也许?这就是它的目的,不是吗?请参阅 RFC 7235。
您应该使用 HTTP header 参数来传递用户令牌。
@DELETE
@Path("/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Info deleteInfo(
@HeaderParam("Authorization") String token,
@PathParam("id") Long id){
}