我必须构建 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 回答
![?](http://img1.sycdn.imooc.com/5333a0490001f9ff02200220-100-100.jpg)
智慧大石
TA贡献1946条经验 获得超3个赞
发送两个信息来识别要删除的资源是不常规的。
这并不意味着它是被禁止的,但你应该意识到它。
在正文中添加此信息?
服务器可能会忽略删除请求的正文。
在路径中添加此信息的后缀?
它打破了路径的语义,这应该是一种在层次结构/资源结构中自然识别资源的方式。
我认为,@QueryParam
如果您有传达这两个信息的限制并且您确实无法更改它,那么您的实际方式是一种可以接受的解决方法。
作为替代方案,您还可以使用 URL 矩阵参数来传达复合 ID
,例如 DELETE /myService/client/1,123456
其中 1 是客户端 ID,123456 是 uuid
![?](http://img1.sycdn.imooc.com/54584d1300016b9b02200220-100-100.jpg)
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
从规范:
DELETE 方法请求源服务器删除由 Request-URI 标识的资源。此方法可能会被源服务器上的人工干预(或其他方式)覆盖。即使从源服务器返回的状态码表明操作已经成功完成,客户端也不能保证操作已经执行。但是,服务器不应指示成功,除非在给出响应时它打算删除资源或将其移动到无法访问的位置。
如果响应包含描述状态的实体,则成功的响应应该是 200(OK),如果操作尚未制定,则为 202(已接受),或者如果操作已经制定但响应不包括,则应为 204(无内容)一个实体。
如果请求通过缓存并且 Request-URI 标识了一个或多个当前缓存的实体,那么这些条目应该被视为陈旧的。对此方法的响应不可缓存。
因此,对参数传递没有任何限制或建议。您可以根据需要使用任何变体,方便您使用
添加回答
举报
0/150
提交
取消