2010-10-28 49 views
10

我目前使用Jersey Framework(JAX-RS實現)來構建RESTful Web服務。項目中的Resource類已經實現了標準的HTTP操作 - GET,POST & DELETE。我想弄清楚如何從客戶端發送請求參數到這些方法。http用REST刪除

對於GET,它將位於查詢字符串中(使用@QueryParam提取),POST將是與請求主體一起發送的名稱/值對列表(使用@FormParam提取)。我使用HTTPClient測試了它們,並且運行良好。對於DELETE操作,我沒有在參數類型/格式上找到任何確鑿的答案。 DELETE操作是否在查詢字符串(使用@QueryParam提取)或正文(使用@FormParam提取)中接收參數?

在網上的大多數DELETE示例中,我觀察到使用@PathParam註釋進行參數提取(這將從查詢字符串中再次獲得)。

這是將參數傳遞給DELETE方法的正確方法嗎?我只想在這裏小心一點,以免違反任何REST原則。

回答

0

@QueryParam將是正確的方法。 @PathParam只適用於任何url參數之前的東西('?'之後的東西)。而@FormParam僅適用於具有表單內容類型的提交的Web表單。

10

DELETE方法應該使用URL來標識要刪除的資源。這意味着您可以使用路徑參數或查詢參數。 除此之外,就REST而言,沒有正確和錯誤的方式來構造URL。

18

是的,它取決於你,但是當我獲得REST思想體系時,DELETE URL應該刪除GET URL請求返回的內容。例如,如果

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

回報項目id爲45678,

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

應該將其刪除。

因此,當QueryParam可以用來控制工作的某些方面時,我認爲使用PathParam比QueryParam更好。

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

'?wipeData =真',就是查詢字符串的濫用。 rfc 3986第3.4節聲明「查詢組件包含非分層數據,與路徑組件(第3.3節)中的數據一起用於標識URI的方案和命名權限(如果有)的範圍內的資源。」 有點令人困惑的是rfc 7231第4.2.1節提到的「例如,基於Web的內容編輯軟件在查詢參數中使用操作是很常見的,例如」page?do = delete「」 我想說的是也不正確。 – aaaaaa 2016-09-07 04:55:07

3

您可以使用這樣

網址爲http://yourapp/person/personid

@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(); 
}