使用REST删除http

时间:2010-10-28 17:23:10

标签: rest jersey

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

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

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

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

4 个答案:

答案 0 :(得分:18)

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

GET http://server/app/item/45678

返回ID为45678的项目,

DELETE http://server/app/item/45678

应删除它。

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

DELETE http://server/app/item/45678?wipeData=true

答案 1 :(得分:12)

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

答案 2 :(得分:3)

你可以这样使用

网址为Vanilla JS solution

@DELETE
@Path("/person/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response deletePerson(@PathParam("id") String id){
    Result result = new Result();
    try{
        persenService.deletePerson(id);
        result.setResponce("success"); 
    }
    catch (Exception e){
        result.setResponce("fail");
        e.printStackTrace();
    }
    return Response.status(200).entity(result).build();
}

答案 3 :(得分:0)

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