2016-09-23 72 views
4

這是一個分拆問題query with filters什麼是使用邏輯操作查詢的REST式方法?

假定我的應用程序正在管理名爲工作負載的對象,並帶有以下字段。我想公開一個REST接口供用戶通過標籤查詢工作負載。

"Workload": {"id":"test1", "labels":["A", "B", "C"]} 
"Workload": {"id":"test2", "labels":["A", "C", "D"]} 
"Workload": {"id":"test3", "labels":["A", "B", "D"]} 

問題:如何設計REST端點,以便它支持基本的邏輯運算的查詢工作?

示例查詢2:我想所有標籤「A」的工作負荷或「B」,但沒有「C」

不知道如何做這樣的REST API的所有,除請求用戶分別用A,B,C查詢,然後自己進行適當的設置操作? (多好的用戶體驗......)

A similar question here用布爾邏輯觸及查詢不同的過濾器,但它似乎不適用於重複過濾器。 (在這種情況下,標籤,這似乎很奇怪做GET /workloads/labels:A/labels:B

回答

0

根據確切的要求,我可能會開始與「谷歌」的方法。只需提供一個查詢表單,然後創建一些可能只是文本的原始查詢語言(如果json足夠簡單,則不需要使用它)。

所以在搜索頁面會是這個樣子:

{ "searchForm": { 
    "target": "/workloads", 
    "method": "GET", 
    "components": [{ "name": "q" }] 
    } 
} 

media-type搜索頁面將定義如何使用的形式,可能是它應該作出這樣的請求:

GET /workloads?q=+A+B-C 

對於查詢語言,我會盡量減少。也許只是「+」和「 - 」符號,就像谷歌一樣。即使在需要更復雜的查詢時,我仍然可以使用文本查詢語言,只是爲了便於手動讀取/測試。

或者,如果您不想成爲 RESTful,您可以將query-uri硬編碼到應用程序中,這樣您就不必創建其媒體類型的搜索頁面。