api - 高级搜索 REST API

标签 api rest search filter

我的要求是实现用于搜索手机的高级搜索 Rest API。搜索 API 的 URI 是 http://myservice/api/v1/phones/search?q= ${query_expression}

其中 q 是复杂的查询表达式。有以下问题

1) 由于高级搜索涉及冗长的查询表达式,因此 URI 将不适合 GET 调用。是否可以通过 POST 请求实现搜索 API 并仍然保持 REST 性?

2)我遇到了以下高级搜索的实现:

  • 第一种方法 - 发送查询表达式的完整中缀表达式。
    例如。
  • PHONENAME STARTSWITH 'AR' AND ( PHONETYPE = '4G' OR PHONECOLOR = 'RED')
  • 第二种方法 - 以 json 的形式构建整个查询表达式。
    例如。
    {"criteria":[ {"index":1,"field":"PHONENAME","value":"AR","comparator":"STARTSWITH"}, {"index":2,"field":"PHONETYPE","value":"4G","comparator":"EQUALS"}, {"index":3,"field":"PHONECOLOR","value":"RED","comparator":"EQUALS"} ],"criteria":"( 1 AND (2 OR 3) )"}
  • 第 3 种方法 - 将查询表达式实现为 json 的替代方法。
    例如。
    {"and":[ {"field":"PHONENAME","value":"AR","comparator":"STARTSWITH"}, "or":[ {"field":"PHONETYPE","value":"4G","comparator":"EQUALS"}, {"field":"PHONECOLOR","value":"RED","comparator":"EQUALS"}] ]}

  • 在这三种方法中,哪种方法更符合 RESTful?欢迎对任何其他方法提出建议:)

    最佳答案

    您可以遵循 ElasticSearch 采取的方法,在您提供的示例中,这是第三个。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html

    第三种方法也更容易理解和维护。
    例如,如果将来您需要添加“模糊”查询运算符并且它将具有完全不同的模型,那将是一件容易的事情。

    关于api - 高级搜索 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990789/

    相关文章:

    search - 如何在cassandra中搜索?

    java - 从文本文件中查找最大值

    flash - YouTube ActionScript 2.0 Player API无法正常工作

    iphone - 如何异步同步 CoreData 和 REST Web 服务,同时正确地将任何 REST 错误传播到 UI

    spring - @Transaction 使我的 REST 端点消失

    python - Django Rest Framework 线程安全吗?

    mongodb - mongodb 使用 mongoose 进行文本搜索

    json - 使用 mongoimport 解析 JSON 失败

    ios - 缺少推送通知授权 iOS 应用程序提交(我不使用它)

    php - 是否可以将我的 opencart 应用程序与 Quickbook 桌面软件集成?