gpt4 book ai didi

rest - 为 RESTful API 构建过滤器/查询字符串

转载 作者:行者123 更新时间:2023-12-04 20:58:05 24 4
gpt4 key购买 nike

我正在使用 Microsoft ASP.NET WebAPI 构建 RESTful API。我的问题涉及 GET 方法,或者更具体地说,是在 URL 中构建查询/过滤字符串的最佳解决方案。

在我的应用程序中,RESTful API 充当代理,或访问我存储在数据库中的资源的访问点。它旨在检索、插入、修改或删除记录。整个系统只存储一种类型的实体,这很复杂,因为它通常包含许多各种字段、列表和数据。我正在使用 NoSQL 来存储这些实体,因为它们很多。

问题在于创建正确的查询字符串以通过指定的条件 检索这些实体。经典查询字符串如下所示:

http://localhost/api/entities?field1=val1&field2=val2&field10=val3

这种查询字符串的问题在于它只允许通过相等运算符来指定字段值,并且每个字段之间没有逻辑运算符的位置(& 被视为有点 AND 运算符)。

我需要的是允许指定更复杂的查询字符串,更像是过滤器。我想允许告诉系统,我想获取记录,例如:

field1 >= value1 OR field2=value2 AND field3 ~ value3

~ 表示我想使用 FUZZY 算法将 field3 与 value3 匹配(虽然我不确定 ~ 是否是表示使用模糊搜索意图的正确字符)。

好吧,如您所见,经典查询字符串无法支持该功能。现在,我传递这样的查询字符串:

http://localhost/api/entities?query=field1>=value1$OR$field2=value2$AND$field3~value3

我将这样的过滤器作为一个字符串传递给我的 Controller 的方法并手动解析它。我的分隔符是“$”,因为如果它们之间有“&”字符,ASP.NET WebAPI 会自动拆分这些参数,我不希望它这样做,因为它无法映射逻辑运算符(OR、AND、等)到方法参数在这种情况下。我不确定我是否通过手动解析此字符串('?' 字符之后的所有内容)来做正确的事情:

field1>=value1$OR$field2=value2$AND$field3~value3

我的问题是:

  1. 在 RESTful API URL 中表示此类查询的正确方法是什么?
  2. 除了编写我自己的解析算法之外,在 ASP.NET WebAPI 中是否有支持此类过滤器的现有解决方案?

最佳答案

我建议您查看 OData。它内置于网络 API ( http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api ) 中。如果您从数据构建域对象并尝试使用这些对象,这可能具有挑战性,但如果您的对象直接来自数据库,那么它会非常强大。我不确定你的模糊匹配,但可以在 http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options 上看到它能够进行过滤的一些示例。 .

关于rest - 为 RESTful API 构建过滤器/查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18214331/

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