2015-10-16 97 views
4

我想知道,下面的RESTful最佳實踐中的方法,我應該這樣定義的網址如下:什麼是使用或條件定義查詢參數的RESTful最佳實踐?

/people?q="[email protected]||phone=11111" 

點是尋找一個人無論是根據他們的電子郵件地址或電話是什麼他們已經插入搜索框。

我一直在閱讀關於使用RESTful服務的最佳實踐的一些指南,但似乎沒有人談論這種情況。

+1

所以你有一個單一的搜索框,其中用戶輸入的東西,你喜歡在幾個字段中搜索輸入?在這種情況下,@morsor的答案不能直接使用,因爲首先需要解析輸入並生成查詢參數。在您的情況下,elasticsearch可能更方便地執行全文搜索。一個簡單的查詢可以看起來像這樣:'localhost:9200/indexName/userData/_search?q = theInput&fields = email,phone'它指示elasticsearch在電子郵件和電話中搜索輸入字詞並返回匹配結果 –

回答

3

REST意味着您通過構建(統一)應用程序界面來遵循標準。

目前沒有使用GET進行一般查詢的標準解決方案。您可以使用許多非標準的URL查詢語言。例如。 RQLOData,數據庫REST API URI的大部分結構:例如mongodb等等...所以儘量不要重新發明輪子。作爲替代方案,您可以像在示例中那樣在查詢參數中發送序列化查詢。它可以用任何標準的查詢語言,例如SPARQL如果您使用REST與RDF詞彙如hydra。如果你不這樣做,那麼你必須在你的vendor MIME type的文檔中描述它。 (在這種情況下,一般查詢意味着您不知道查詢的結構將如何)。

如果您正在尋找一種非常規查詢解決方案,那麼只要您描述,就可以使用任何URI template不知何故,您的RDF詞彙鏈接參數或供應商MIME類型的文檔中。如果您不明白我在說什麼,請檢查統一接口約束/自描述消息,manual的HATEOAS部分或使用wikipedia。 (在這種情況下,非常規查詢意味着您對查詢結構將有什麼想法,並且您可以使用URI模板來描述它。)

請注意,您必須解析並驗證和授權這些查詢,所以發送SQL語句並在沒有任何檢查的情況下通過數據庫運行它可能會對您的應用程序造成致命性影響

+0

真的很棒,非常感謝 ;) –

1

如何:

/people?condition=OR&[email protected]&phone=11111 

這將允許改進的查詢方法不改變端點的名稱/ URL。