2015-09-13 152 views
1

我正在Java中創建REST服務,並對GET方法的參數有疑問。 我必須通過以下PARAMS在GET請求REST服務的GET請求的參數Java

功能

「GET」 文件狀態:

PARAMS:

時間範圍:(字符串)

FlowId :(字符串)

ID_A =或ID_B =或兩者(字符串)

IS_ADD_A =或IS_ADD_B =或兩者(字符串)

的Regex =(字符串)

曲奇= XXXXX

因此,作爲有6 params,因此將它作爲查詢字符串傳遞將不是一種有效的方式,並且不能在主體中相同(因爲它違背HTTP GET規範) 將此作爲POST調用將違反REST原則,因爲我想從服務器獲取數據, 解決這個問題的一種有效方法是將參數傳遞爲查詢字符串是沒有問題的,將它傳遞到與HTTP規範相反的主體中,將其作爲可能不太好的標題,從而使其成爲POST請求,這將聲明字段的REST原則。

回答

1

在HTTP GET調用的主體中傳遞數據不僅違反規範,而且會導致各種服務器端技術出現問題,這些問題假定您不需要在GET調用中訪問主體。 (某些客戶端框架在GET和查詢中也存在一些問題)如果您使用長參數查詢,我會使用POST。然後它使用POST獲取數據,但您不是唯一必須這樣去支持可能的大型查詢的人。

+0

yes我同意put body會違反HTTP規範,並且獲取數據的POST會違反REST,那麼使用params作爲頭文件是否有效並且明智? –

+0

你可能會爭辯說,提供一個搜索終結點,例如每個POST的myentity/search和發送查詢條件不會違反REST原則。查詢可能是一個有效的實體,POST不需要創建一些東西,但可以。 – benohead

+0

我不會使用標題來傳輸查詢條件。標題是用於元數據,並放在那裏內容感覺不對。 – benohead

1

如果你的參數值不是很長,在這裏使用查詢字符串是最好的選擇。 6個參數不是很多,只要您不超過路徑中字符的IE限制 - 2,048(http://www.boutell.com/newfaq/misc/urllength.html)。例如,Google搜索引擎使用更多參數,然後是6.如果URL路徑有可能超出上述限制,則應該使用POST。

+0

雖然6個參數雖然不是很多,但它們的長度會很長,而且URL可能會受到影響,POST會使遠程客戶端感到困惑,因爲他想獲取數據但發現他正在使用POST –

+0

在這種情況下你應該使用POST方法。將實際數據作爲標題字段傳輸被認爲是不好的做法([http://www.soapui.org/testing-dojo/best-practices/understanding-rest-headers-and-parameters.html](http: www.soapui.org/testing-dojo/best-practices/understanding-rest-headers-and-parameters.html))。您可以記錄您的API以避免混淆。 – puczo