2016-04-29 6 views
10

Non è contrario all'approccio in stile REST per passare un corpo della richiesta insieme alla richiesta GET?Elasticsearch Richiesta GET con corpo della richiesta

Per esempio per filtrare qualche informazione in elasticsearch

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

alcuni strumenti sono anche progettati per evitare richiesta corpo nella richiesta GET (come postino)

+0

Vedere questa risposta che potrebbe aiutare: http://stackoverflow.com/questions/34795053/es-keeps-returning-every-document/34796014#34796014 – Val

+0

Risposta dettagliata su GET e Body - https://stackoverflow.com/a/8502004/1589840 – serhiisavruk

risposta

11

No. Non è.

In REST, utilizzare POST per eseguire query non ha senso. POST dovrebbe modificare il server. Durante la ricerca ovviamente non modificare il server.

GET si applica qui molto bene.

Detto questo, siamo consapevoli che alcuni linguaggi e strumenti non lo consentono. Sebbene la RFC non menzioni che non si può avere un corpo con GET.

Quindi elasticsearch supporta anche POST.

questo:

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

funzionerà allo stesso modo.

+4

Se si sostiene che l'invio di una richiesta di ottenere con il corpo è RESTful, quindi come si spiega [questo] (https://stackoverflow.com/a/983458/1057791)? – BornToCode

+0

-1 Ecco perché è il caos con tutta questa interpretazione. Se la semantica fosse ignorata, perché ci sarebbe bisogno di così tanti tipi di richieste. Le API RESTful non devono prendere in considerazione un corpo nei loro endpoint GET. Lo stack elastico è solo hacky e non maturo, molto lavoro da fare su di esso (come la maggior parte dei nuovi progetti open source, niente di sbagliato in questo, il tempo per migliorarlo). Se non c'era un corpo in GET, non c'era bisogno di un'alternativa endpoint POST ... Ecco perché è caos, nessuna convenzione. In realtà sto per lasciare il percorso nell'URL per decidere, ma REST è stato progettato per usare HTTP semanti –

+0

Un tipo di richiesta HTTP per dominarli tutti, nel modo migliore e più flessibile a mio parere, e lasciare la flessibilità a chi li implementa e usa il protocollo, attraverso l'url. in questo modo non ci sarà alcuna oscurità con alcuni endpoint (cosa stanno facendo esattamente). Non sono un vero fan di REST. Sono un fan della semplicità e della flessibilità e di cose che sono facili da capire a prima vista –