为了账号安全,请及时绑定邮箱和手机立即绑定

将附加参数传递给 HTTP @DELETE 方法的正确方法是什么

将附加参数传递给 HTTP @DELETE 方法的正确方法是什么

幕布斯7119047 2022-07-20 16:48:01
我必须构建 JAX-RS Web 服务,它将从客户端资源中删除客户端,另外它应该在请求中有外部 uuid。没有externalId的方法实现@DELETE很简单/myService/client/1@DELETE    @Path("/client/{client}")    public Response removeClient(@PathParam("client") long client) {        // implementation code         return Response.status(200).build();    }但我应该在哪里添加 externalId @QueryParam?万一@QueryParamURI是这样的,它是正确的设计吗?/myService/client/1?externalId=d852e3fc-b7ac-42d7-b22b-74cb4da709ec  @DELETE        @Path("/client/{client}")        public Response removeClient(@PathParam("client") long client, @QueryParam("externalId") String externalId ) {            // implementation code             return Response.status(200).build();        }或者也许我应该将 externalId 发送到request body或作为@PatchParam?哪个是正确的设计?对于这种情况,我应该使用另一种 HTTP 方法而不是 HTTP DELETE 吗?
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

发送两个信息来识别要删除的资源是不常规的。
这并不意味着它是被禁止的,但你应该意识到它。

在正文中添加此信息?
服务器可能会忽略删除请求的正文。

在路径中添加此信息的后缀?
它打破了路径的语义,这应该是一种在层次结构/资源结构中自然识别资源的方式。

我认为,@QueryParam如果您有传达这两个信息的限制并且您确实无法更改它,那么您的实际方式是一种可以接受的解决方法。
作为替代方案,您还可以使用 URL 矩阵参数来传达复合 ID
,例如 DELETE /myService/client/1,123456其中 1 是客户端 ID,123456 是 uuid


查看完整回答
反对 回复 2022-07-20
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

规范:

DELETE 方法请求源服务器删除由 Request-URI 标识的资源。此方法可能会被源服务器上的人工干预(或其他方式)覆盖。即使从源服务器返回的状态码表明操作已经成功完成,客户端也不能保证操作已经执行。但是,服务器不应指示成功,除非在给出响应时它打算删除资源或将其移动到无法访问的位置。

如果响应包含描述状态的实体,则成功的响应应该是 200(OK),如果操作尚未制定,则为 202(已接受),或者如果操作已经制定但响应不包括,则应为 204(无内容)一个实体。

如果请求通过缓存并且 Request-URI 标识了一个或多个当前缓存的实体,那么这些条目应该被视为陈旧的。对此方法的响应不可缓存。

因此,对参数传递没有任何限制或建议。您可以根据需要使用任何变体,方便您使用


查看完整回答
反对 回复 2022-07-20
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信