使用REST删除http

Aru*_*run 12 rest jersey

我目前正在使用Jersey Framework(JAX-RS实现)来构建RESTful Web服务.项目中的Resource类已经实现了标准的HTTP操作--GET,POST和DELETE.我试图弄清楚如何从客户端向这些方法发送请求参数.

对于GET,它将在查询字符串(提取使用@QueryParam)中,POST将是@FormParam与请求主体一起发送的名称/值对列表(使用提取).我使用HTTPClient测试它们并且工作正常.对于DELETE操作,我没有找到关于参数类型/格式的任何结论性答案.DELETE操作是否在查询字符串(使用提取@QueryParam)或正文(使用提取)中接收参数@FormParam

在Web上的大多数DELETE示例中,我观察到使用@PathParam注释进行参数提取(这将再次来自查询字符串).

这是将参数传递给DELETE方法的正确方法吗?我只是想在这里小心,以便我不违反任何REST原则.

tux*_*yer 18

是的,由您决定,但是当我获得REST意识形态时,DELETE URL应该删除由GET URL请求返回的内容.例如,如果

GET http://server/app/item/45678
Run Code Online (Sandbox Code Playgroud)

返回ID为45678的项目,

DELETE http://server/app/item/45678
Run Code Online (Sandbox Code Playgroud)

应该删除它.

因此,我认为使用PathParam比使用QueryParam更好,因为QueryParam可用于控制工作的某些方面.

DELETE http://server/app/item/45678?wipeData=true
Run Code Online (Sandbox Code Playgroud)

  • '?wipeData = true'是对查询字符串的误用.rfc 3986第3.4节规定"查询组件包含非分层数据,与路径组件(第3.3节)中的数据一起用于标识URI方案和命名权限(如果有)范围内的资源." 有点令人困惑的是rfc 7231第4.2.1节提到"例如,基于Web的内容编辑软件通常在查询参数中使用动作,例如"page?do = delete""我会说这也是不正确的. (3认同)

Dar*_*ler 12

DELETE方法应使用URL来标识要删除的资源.这意味着您可以使用路径参数或查询参数.除此之外,就REST而言,构建URL没有正确和错误的方法.


Gan*_*alf 0

@QueryParam将是正确的方法。 @PathParam仅适用于任何 url 参数之前的内容(“?”之后的内容)。并且@FormParam仅适用于提交的具有表单内容类型的 Web 表单。