2015-10-16 100 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。