java - 如何在 REST API 中表达查询参数之间的高级表达式?

标签 java rest jersey jax-rs resteasy

问题(或缺失的特征)是缺乏不同查询参数之间的表达可能性。如我所见,您只能指定 and之间的参数,但如果你想拥有not equal,你如何解决它, orxor

我希望能够表达如下内容:

所有年龄在 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/

相关文章:

rest - CakePHP 3.x REST API-调试关闭时的自定义错误消息

ios - 带有 CoreData 和分页的 RestKit

json - 在JSON中返回Jersey异常

java - 如何在 jersey WriterInterceptor 实现中获取 @interface 参数

java - 从 MarkLogic Java API 获取最后修改的属性

java - 在 Vaadin 框架中,如何获取客户端时区以用于渲染显示的第一个页面

java - 使用 apache HttpClient 的最终 URL(在所有重定向之后)

php - 使用 PHP 发送/接收 PUT 请求,在解析请求正文时遇到问题?

java - 二叉搜索树选择方法实现

java - Spring 安全oauth2 : get username in REST webservice