2013-02-14 42 views
3

我有一種情況,我正在努力處理現實世界中的REst GET和POST架構哲學。REst GET Vs POST與大郵件正文

我有一個REst調用是冪等的,它的性質。它需要一個複雜的數據類型在它的有效載荷中(一種XML中的保險策略),在其上執行復雜的業務邏輯並返回一個溢價。它對國家沒有任何影響,因此基本上是冪等的。

REst調用目前是POST。對此有效的理由是消息體很大,很可能會被丟棄並且與Internet Explorer混亂。但是,它也是冪等的,從根本上違反了GET Vs POST。

以前有人遇到過這個難題嗎?謝謝。

回答

1

我有同樣的問題,我的解決方案是實用的。我的API使用POST甚至冪等面臨的GET請求限制時,那麼:

If the form data would contain non-ASCII characters or; 
If the form data set is large. 

我認爲有其他異常,但我想不出一個現在。

UPDATE:另外一個例外,如果出於某種原因,我不希望參數在請求url中可見,我也使用POST來處理idempotent。

2

我不知道,如果其含義是可逆的:

GET SHOULD be idempotent是已定義的東西,但沒有禁止POST爲冪等。

在你的地方,我會去POST方法。另外,如果你的請求包含一個實體,它不能是一個GET

0

雖然我不認爲有一個很好的替代方法來使用POST請求進行大型主體GET,但您應該記住POST請求通常不會被(反向)代理緩存。大多數HTTP緩存(我知道)不考慮計算對象緩存鍵的POST主體。如果您的計算是資源密集型的,這可能是一個問題。