2016-04-29 189 views
10

是不是违背REST风格的方法来传递请求正文与GET请求?Elasticsearch GET请求与请求正文

例如以过滤Elasticsearch

一些信息
curl localhost:9200/megacorp/employee/_search -d '{"query" : {"filtered" : {"filter" : {"range" : {"age" : { "gt" : 30 }}},"query" : {"match" : {"last_name" : "smith"}}}}}' 

一些工具甚至设计,以避免请求主体的GET请求(如邮递员)

+0

看到这个答案可能有所帮助:http://stackoverflow.com/questions/34795053/es-keeps-returning-every-document/34796014#34796014 – Val

+0

有关GET和Body的详细解答 - https://stackoverflow.com/a/8502004/1589840 – serhiisavruk

回答

11

不行,这不行。

在REST中,使用POST进行查询没有任何意义。 POST应该修改服务器。在搜索时显然不要修改服务器。

GET很适用于此。

这就是说,我们知道一些语言和工具不允许这样做。虽然RFC没有提到你不能有一个身体GET

所以elasticsearch也支持POST

此:

curl -XPOST localhost:9200/megacorp/employee/_search -d '{"query" : {"filtered" : {"filter" : {"range" : {"age" : { "gt" : 30 }}},"query" : {"match" : {"last_name" : "smith"}}}}}' 

会的工作方式相同。

+4

如果您声称发送带有body的get请求是RESTful,那么您如何解释[this](https://stackoverflow.com/a/983458/1057791)? – BornToCode

+0

-1这就是为什么它与所有这些解释混乱。如果语义会被忽略,为什么会需要这么多的请求类型。 RESTful API不应考虑GET终端中的主体。有弹性的堆栈只是一个黑客,并不成熟,需要做很多工作(像大多数新的开源项目,没有什么不对,有时间做得更好)。如果GET中没有主体,则不需要POST端点替代方案......这就是为什么它是混乱的,没有约定。我实际上是在URL中留下路径来决定,但REST被设计为使用HTTP semanti –

+0

一个HTTP请求类型来统治它们,这是我认为最好的方式和最灵活的方式,并为那些实施和使用该协议,通过网址。这样就不会有一些端点模糊(他们到底在做什么)。我不是REST的粉丝。我对简单性和灵活性以及一见钟情易懂的东西很感兴趣 –