2012-07-19 34 views
2

我已經通過這個 How best to design a REST API with multiple filters?REST Web服務 - 獲取,但對多個對象

了這確實幫助時,你有說3個或4個過濾條件,您可以容納在查詢字符串。

但我們來看一下這個例子 你想獲得關於某個startdate和enddate之間20個電話號碼的詳細的電話號碼。 現在我確實同意,理想情況下應建議對每個號碼進行個別查詢,然後在客戶端對所有數據進行整理。

但是,對於某些Live系統來說,這將意味着在交換機或cdr數據庫上進行20輪查詢。這是20個請求 - 響應週期加上客戶端必須根據時間重新整理和排序。在數據庫級別,它將是一個簡單的單個查詢,它可以返回一個有序數據並將其轉換回客戶端可以嵌入到系統中的REST XML響應。

如果我們要使用GET,查詢字符串會變得非常混亂並且也有限制。 任何建議來解決這個問題。 當然,我們可以發送POST請求,其中包含所有數字的xml,但這是違反REST Get原則的。

回答

2

你似乎什麼缺少的一個重要REST的概念,caching。作爲一個例子,這可以在單個客戶端的瀏覽器中完成。或者它可以作爲所有客戶端和現場製作系統(不管它可能是什麼)之間的shared cache完成。從而減少對實時生產系統或實際交換機的查詢。

你真的應該花一些時間來閱讀Fieldings thesis,並瞭解REST是一種建築風格

+0

謝謝。我假定共享緩存是指客戶端查詢的臨時數據存儲區,並由主Live服務器/交換機定期更新,以便服務器僅將數據輸出到中間緩存並且從不查詢。雖然緩存可以儘可能查詢。但是你是否說要一次發送一個數字的查詢,併發送20個20個請求的請求,但是這些查詢是針對臨時數據存儲區運行的? – Soumya 2012-07-19 13:30:12

+1

@Soumya舉個例子,你寫的是什麼。或者如果客戶A提出20個查詢,並且通過協議,這些查詢有效期爲48小時。這20個查詢在中間件緩存上共享以供所有客戶端使用。如何實施這個解決方案取決於你 - 我所說的是,這是一個符合REST設置的限制的解決方案。 – Anders 2012-07-19 13:42:36

+0

謝謝。我也通過這個http:// stackoverflow。com/questions/6127507 /處理多個參數-u-uri-restfully-in-java。然而,在我的情況下,建立一箇中間緩存並不是一個真正的選擇,我們已經有一個我們正在查詢的系統。唯一不同之處在於它在用於任何請求的XML請求POST請求之前,包括獲取請求。所以我們沒有任何麻煩。但是,現在我們正在嘗試遷移到基於REST的服務,並且遇到與REST GET原則衝突的問題。 – Soumya 2012-07-22 08:32:55

3

如果GET使用OData查詢。例如,當以數字形式表示(UNIX時間)的URI可能看起來像你的開始和結束日期:

GET http://operatorcalls.com/Calls/Details $過濾器=日期樂1342699200和日期GT 1342526400

1

我在這裏找到了一個解決方案Handling multiple parameters in a URI (RESTfully) in Java 但不是很滿意。 因此,實際上我們將最終使用/ cdr?numbers = number1,number2,number3 ... 但是,由於URL中的查詢字符串有限制,並且看起來並不像優雅的方案。任何人都可以在自己的實現中找到解決方案? 基本上不使用POST進行這種提取請求,也不使用cumbresome和冗長的查詢字符串。 我們使用澤西島,但也開放使用CXF或春季REST