2015-06-25 53 views
2

我面臨着一個PHP寧靜的API中有問題的請求......PHP - 寧靜的API - HTTP GET長URI

我試圖得到一些產品信息(重量,工藝,價格...)通過調用這個API。

問題是提供的URI可能包含很多字符,因爲我們試圖儘可能減少API調用。你可以理解,如果我們使用HTTP GET方法發送過長的URI,那麼我肯定會用414或500 HTTP錯誤結束。

那麼,如何才能:

  1. 發送一個HTTP GET請求來獲取具有長URI
  2. 保持RESTFUL(信息,而無需使用POST,如果我指的是寧靜的文檔 - >這是主要的問題)

這裏是一個請求的示例:

http://<myWebsite>/rprocess/api/process/{"data":["FLY.DELeco.LOT100.DIM10x10.FACrv.SUPdemma.GRA350.PELbrv.VERss","FLY.DELnor.LOT500.DIM20x30.FACr.SUPcoubr.GRA300.PELbrv.VERss"]} 
  • 如您所見,我們在URI中發送一個JSON編碼的字符串。
  • 這個例子工程,因爲我們只是試圖讓[進程]信息的兩種產品(我們想打個電話有很多更多)

我已經尋找一個答案就這個問題,但它看起來就像我們不能在這種情況下保持安寧。

這裏是我已經找到了答案:

  1. 使用POST並添加組頭以X-HTTP-Method-Override: GET
  2. 服務器(不推薦)
  3. 拆分,以便在GET請求上增加url limit size不達到url長度限制(這不是一個好主意,因爲API可以一次處理更多產品,因爲我們實際上可以發送它...)

我希望th OSE信息可以幫助您回答我的問題:)

謝謝您的幫助

回答

0

也許你可以嘗試通過ID查找您的數據,如果你有一個規範化的數據庫表來幫助縮短您的要求

或您可以嘗試將查詢發佈到服務器,存儲請求的詳細信息,然後使用先前存儲的請求的ID執行GET請求。

+0

謝謝您的回答! 我不認爲這個問題存在... 嘗試想象發送一個帶有'12345'而不是我們的「FLY ...」的json,在某些時候我們將達到URI長度的限制,即使ID較小。 –

+0

是否值得考慮在客戶端上使用分頁?這樣你可以檢索更多的可管理的塊 – arcanine

+0

分頁將導致這樣的答案: 拆分GET請求,以不達到URL長度限制(這不是一個好主意,因爲API可以處理方式更多的產品在我們一次實際上可以把它...) –