2014-03-03 22 views
2

我正在設計一個RESTful API。我需要檢索一個資源(複雜報告),通過一個非常長的過濾器列表。事情是這樣的:從RESTful API檢索資源,但URI可能會超過允許的長度

http://example.com/orders?query=a-very-long-list-of-filters

所以我應該使用GET HTTP動詞,但如果URI超過允許的URL長度(由瀏覽器,Web服務器或中間代理),我可以使用JSON的POST請求身體封裝過濾器這樣做? POST動詞用於創建資源和部分更新,但不用於檢索資源。我該如何解決這種情況。請告訴我一個符合REST基礎的解決方案,因爲編碼URL以減少長度並不是一個令人滿意的解決方案。我一直在研究很多,但我沒有找到適當和明確的指導方針。任何幫助將不勝感激。

+0

你期待你的查詢字符串是多久?看看這篇文章。實際上,我懷疑你會達到一個限制 - 特別是對於API http://stackoverflow.com/a/812962/2812842 –

+0

謝謝@ scrowler的鏈接。我已經檢查了一些這樣的評論,但我不知道多久的網址可以,所以我不能保證它不超過2048個字符(IE的情況下)。這取決於用戶界面選擇的過濾器,事實上它可能如此之久。 – Delmo

回答

1

您可以使用POST請求作爲GET請求的替代方法來發送任何可能超出允許的最大查詢字符串長度的大數據,但要符合REST標準,建議您還發送一個'X-HTTP -Method-Override:GET'標頭,以便告訴服務器將其視爲GET請求。我已經看到一些衆所周知的庫,例如谷歌翻譯允許這個 - https://cloud.google.com/translate/v2/using_rest?csw=1#Translate

+0

好主意!!!謝謝 – Delmo