- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题(或缺失的特征)是缺乏不同查询参数之间的表达可能性。如我所见,您只能指定 and
之间的参数,但如果你想拥有not equal
,你如何解决它, or
或 xor
?
我希望能够表达如下内容:
所有年龄在 20 岁或名为 Bosse 的用户
/users?age=22|name=Bosse
除 David 和 Lennart 之外的所有用户
/users?name!=David&name!=Lennart
我的第一个想法是使用一个名为 _filter 的查询参数,并使用我的表达式获取一个字符串,如下所示:
所有年龄在 22 岁或名字不是 Bosse 的用户
/users?_filter=age eq 22 or name neq Bosse
这个问题的最佳解决方案是什么?
我正在用 Java 和 Jersey 编写我的 API,所以如果 Jersey 有任何特殊的解决方案,请告诉我。
最佳答案
我可以看到实现该目标的两个解决方案:
在执行 GET
方法时使用包含表达式的特殊查询参数。这是 OData 处理其 $filter
参数的方式(参见此链接:https://msdn.microsoft.com/fr-fr/library/gg309461.aspx#BKMK_filter)。这是一个示例:
/AccountSet?$filter=AccountCategoryCode/Value eq 2 or AccountRatingCode/Value eq 1
Parse.com 也使用这种方法及其 where
参数,但查询是使用 JSON 结构描述的(参见此链接:https://parse.com/docs/rest/guide#queries)。这是一个示例:
curl -X GET \
-H "X-Parse-Application-Id: ${APPLICATION_ID}" \
-H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-G \
--data-urlencode 'where={"score":{"$gte":1000,"$lte":3000}}' \
https://api.parse.com/1/classes/GameScore
如果难以描述,您还可以使用 POST
方法并在请求负载中指定查询。 ElasticSearch 使用这种方法来支持查询(请参阅此链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html)。这是一个示例:
$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{
"query": {
"bool" : {
"must" : {
"query_string" : {
"query" : "some query string here"
}
},
"filter" : {
"term" : { "user" : "kimchy" }
}
}
}
}
'
希望对你有帮助,蒂埃里
关于java - 如何在 REST API 中表达查询参数之间的高级表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612159/
我是一名优秀的程序员,十分优秀!