高级搜索RESTAPI
我的要求是实现高级搜索RESTAPI来搜索手机。搜索API的URI是${query\u expression} 其中q是复杂查询表达式。有以下问题吗 1) 由于高级搜索涉及冗长的查询表达式,因此URI将不适合GET调用。通过POST请求实现搜索API并仍然保持RESTfusion可以吗 2) 我遇到了以下高级搜索的实现:高级搜索RESTAPI,api,rest,search,filter,Api,Rest,Search,Filter,我的要求是实现高级搜索RESTAPI来搜索手机。搜索API的URI是${query\u expression} 其中q是复杂查询表达式。有以下问题吗 1) 由于高级搜索涉及冗长的查询表达式,因此URI将不适合GET调用。通过POST请求实现搜索API并仍然保持RESTfusion可以吗 2) 我遇到了以下高级搜索的实现: 第一种方法-发送查询表达式的完整中缀表达式。 例如 PHONENAME以'AR'和(PHONETYPE='4G'或PHONECOLOR='RED')开头。 第二种方法-以
- 第一种方法-发送查询表达式的完整中缀表达式。 例如
PHONENAME以'AR'和(PHONETYPE='4G'或PHONECOLOR='RED')开头。
- 第二种方法-以json的形式构造整个查询表达式。
例如
{“标准”:[ {“index”:1,“field”:“PHONENAME”,“value”:“AR”,“comparator”:“STARTSWITH”}, {“索引”:2,“字段”:“电话类型”,“值”:“4G”,“比较器”:“等于”}, {“index”:3,“field”:“PHONECOLOR”,“value”:“RED”,“comparator”:“EQUALS”} ],“标准”:(1和(2或3))“}
- 第三种方法-将查询表达式实现为json的替代方法。
例如
{“和”:[ {“field”:“PHONENAME”,“value”:“AR”,“comparator”:“STARTSWITH”}, “或”:[ {“字段”:“电话类型”,“值”:“4G”,“比较器”:“等于”}, {“字段”:“PHONECOLOR”,“值”:“红色”,“比较器”:“等于”}] ]}
在这三种方法中,哪一种方法会被认为更安静?欢迎对任何其他方法提出建议:)您可以遵循ElasticSearch采取的方法,您给出的示例中的第三种是ElasticSearch 看 第三种方法也更容易理解和维护。 例如,如果将来您需要添加“fuzzy”查询操作符,并且它将具有完全不同的模型,那么这将是一件容易的事情
POST
是一应俱全的。最好使用它来创建资源,但根据规范,它也可以以这种方式使用。但是,您应该考虑将端点更改为<代码> /搜索结果< /代码>。这使您可以灵活地在以后开始存储搜索结果,并且您可以返回指向特定复杂查询结果的位置
标题。另一种方法是让用户发布他们的搜索条件,然后执行GET/search results?criteria={id}
我想说的是,使用参数获取某些资源是REST所需要的。指定为参数的内容对REST不重要(如果它不是URI或其他资源)。所以我会选择选项1,或者类似的东西,在URI中很容易阅读。