gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:31 26 4
gpt4 key购买 nike

问题(或缺失的特征)是缺乏不同查询参数之间的表达可能性。如我所见,您只能指定 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com