2009-01-30 92 views
10

您將如何設計RESTful查詢以支持參數之間的OR操作數。 假設我的資源有兩個字段field1 & field2。你會如何設計的URL,以使下面的查詢:RESTful URL設計 - 如何使用參數之間的OR進行查詢

「獲取爲MyResources其中字段1 = X或場= Y」

設計查詢在REST是相當直接的,但我只看到查詢,支持AND在查詢字段之間。例如/ myresource FIELD1 = X & FIELD2 = Y

一種可能的解決方案可以是提供具有自由文本一個單一的查詢參數,其中一部分,例如:?

GET/myresource Q = {FIELD1 = x或FIELD2 = y}

但是這會使客戶端解析和擴展或減少過濾字段變得更加複雜。

你有什麼建議?

回答

10

查詢參數不是按照定義和相關的,它們只是惰性參數 - 你如何處理它們取決於你。對於一個或搜索我建議:

GET /myresources?field1=x&field2=y&inclusive=true 

如果要默認爲AND關係(合理的),以及任何你想要的其他擴展當然是可能的。

2

爲了什麼它的價值,SO使用下面的格式用於查找與多個標籤的問題:

http://stackoverflow.com/questions/tagged?tagnames=jquery or css or asp.net or php or web-development or svn

這是完全合理的,他們,;承擔這些分離是標籤無效字符他們自己。搜索引擎通常使用q=keyword1+keyword2,並且在關鍵字本身中對任何+進行網址編碼,如果這是搜索URI,那麼我建議您執行此操作。

1

這取決於

,如果你希望你的資源與八方來條件1訪問或CONDITION2你可以只是把他們的方式......

,但如果你想有兩種可能性(使用AND或OR )你將不得不實施類似annakata說的一個參數,指示應該如何將條件添加到查詢中...

如果您想要更靈活的方法(cond1和cond2或cond3),我看不到其他選擇但實施你自己的查詢與自由文本,就像你說的...

另一方面,如果你總是查詢同一個字段(我認爲情況並非如此,因爲你指定了field1,field2),你可以使用allemb的方法,並使用一些字符(「,」或「;」 )親自分隔值...

,我已經開發了某種微小的查詢語言,如

字段1 = VAL1 ..VAL2(VAL1之間FIELD1和val2) FIELD1 => val2的(FIELD1> val2次) FIELD1 = VAL1; val2的(FIELD1 = VAL1或FIELD1 = val2次) filed1 = VAL1(Field1包含VAL1)

FIELD1 = val1..val2 &> VAL3(VAL1和val2和字段1> VAL3之間字段1 ...

好,你的想法

但後來我每隔結合使用條件和,所以這只是一個擴展案例waht aleemb說...