[英]Why is not a good practice to have an entity body in a HTTP DELETE request?
[英]Mapping an HTTP DELETE request entity body to a method parameter
我正在使用JAX-RS
構建REST
API
。 在有角前端中,我正在HTTP請求(JSON格式)的主體中發送要刪除的對象。 現在,我需要一種映射此HTTP DELETE
主體請求的方法,該請求包含需要刪除的對象到REST
方法中的局部變量。 例如,在SPRING
我通過使用@RequestBody
注釋對象變量來做到這一點。
我正在查看oracle的javaEE7文檔,但是其中的示例確實很基本,並且不包含復雜的對象,我在其他地方找到的不同教程也都在簡單刪除請求的軌跡上,這些請求使用@PathParam
映射了一個簡單的id。
也許在這個問題之前,我要問的第一個問題是在HTTP的請求正文中發送對象是否完全是一種好方法? 盡管沒有明確禁止,但我正在閱讀一些文章,將其指定為不好的做法。 這種方法的缺點是什么? 我記得在SPRING
研究此方法時,我讀到某個地方,通過特制的用戶輸入可能會進行惡意攻擊(我使用的持久性框架是JPA,EclipseLink)。 將主鍵映射到一系列@Path
變量,然后使用@PathParam
映射它們會@PathParam
嗎?
因此,總而言之,這是一個好方法嗎? 以及如何讀取HTTP請求正文中的對象? 一些指針將不勝感激!
與Spring MVC不同,JAX-RS不會為請求有效負載定義任何注釋。
JAX-RS方法略有不同:未使用任何@***Param
批注進行批注的參數值是從請求實體主體映射的。 這樣的參數稱為實體參數 。
我應該問的第一個問題是,在HTTP的請求正文中發送對象是否完全是一種好方法?
請不要這樣做,因為這不應該是DELETE
工作方式。
在RFC 7231的引號下方找到該文檔,該文檔當前定義了HTTP / 1.1協議的語義和內容:
DELETE
請求消息中的有效負載沒有定義的語義。 在DELETE
請求上發送有效內容主體可能會導致某些現有實現拒絕該請求。
為了實現互操作性,我建議您盡可能遵循標准。 而且,您絕對不應該要求發送任何有效負載來標識要刪除的資源。
它的主鍵長8個字段。
該URI,它代表üniversal 方案資源我 dentifier,是為了識別資源 。
由於您有一堆字段可以共同標識資源,因此建議您重新考慮應用程序設計。 例如,您可以引入某種獨特的價值來識別您的資源。 看看UUID
。
使用JAX-RS,您不需要@RequestBody之類的東西。
您可以簡單地將類添加為參數,並將其填充為請求正文。
在您看來,將數據傳遞到正文中是有道理的,但是您的URL看起來如何? 與REST一樣,您應該擁有可通過URL尋址的資源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.