搜索API - HTTP查询参数格式

时间:2011-09-26 16:44:44

标签: api http url search solr

我为我工作的网站创建了搜索API。例如,它支持的一些查询是:

  • /api/search - 返回热门搜索结果
  • /api/search?q=car - 返回与术语" car"
  • 匹配的结果
  • /api/search?start=50&limit=50 - 从offset 50
  • 开始返回50个结果
  • /api/search?user_id=3987 - 返回ID为3987
  • 的用户拥有的结果

可以混合和匹配这些查询参数。它是使用Solr的分面搜索在幕后实现的。

我正致力于添加可以根据数字属性过滤结果的查询参数。例如,我可能只想返回视图计数大于100的结果。我想知道指定它的最佳做法是什么。

Solr使用这种方式:

/api/search?views:[100 TO *]
Google似乎做了类似的事情:

/api/search?viewsisgt:100

这些似乎对我都没有吸引力。是否有指定此类查询字词的最佳做法?有什么建议吗?

3 个答案:

答案 0 :(得分:1)

只需使用','作为from / to的分隔符,它就是最好的,在我看来是直观的:


# fixed from/to
/search?views=4,2

# upper wildcard
/search?views=4,

# lower wildcard
/search?views=,4

我采取包容性价值观。在大多数情况下,您不需要独占/包含额外的语法糖。

绑定它甚至可以在一些开箱即用的框架中运行得很好(比如spring mvc),它将','分隔值绑定到值数组。然后,您可以使用特定访问器(getMin(),getMax())包装内部数组。

答案 1 :(得分:0)

谷歌的方法很好,为什么它不吸引人?

我的建议来了:

/api/search?viewsgt=100

答案 2 :(得分:0)

我认为限制的数学符号是合适的。

[x  the lower limit can be atleast x
x]  the upper limit can be atmost x
(x  the lower limit must be strictly greater than x
x)  the upper limit must be strictly lesser than x

因此,

q=cats&range=(100,200) - the results from 100 to 200, but not including 100 and 200
q=cats&range=[100,200) - the results from 100 to 200, but the lower limit can be greater than 100
q=cats&range=[100 - any number from 100 onwards
q=cats&range=(100 - any number greater than 100
q=cats&range=100,200 - default, same as [100,200] 

当然,它的美学仍然值得怀疑,但似乎(IMO)对人眼来说最直观,解析器仍然很容易。

根据http://en.wikipedia.org/wiki/Percent-encoding =,&,[,],(,)保留