2016-04-29 13 views
10

Czy to nie w stylu REST podejście do przekazywania treści żądania wraz z żądaniem GET?Elasticsearch Żądanie GET z jednostką żądania

Na przykład filtrować informacje w Elasticsearch

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

nawet niektóre narzędzia są zaprojektowane, aby uniknąć żądania ciało żądanie GET (jak listonosz)

+0

Zobacz tę odpowiedź, która może pomóc: http://stackoverflow.com/questions/34795053/es-keeps-returning-every-document/34796014#34796014 – Val

+0

Szczegółowa odpowiedź na temat GET i Body - https://stackoverflow.com/a/8502004/1589840 – serhiisavruk

Odpowiedz

11

Nie, to nie jest.

W trybie REST użycie zapytania o wartości POST nie ma sensu. POST ma zmodyfikować serwer. Podczas wyszukiwania oczywiście nie modyfikuj serwera.

GET stosuje się tutaj bardzo dobrze.

W związku z tym jesteśmy świadomi, że niektóre języki i narzędzia na to nie zezwalają. Chociaż RFC nie wspomina, że ​​nie można mieć ciała z GET.

Tak więc elasticsearch obsługuje również POST.

to:

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

będzie działać w ten sam sposób.

+4

Jeśli twierdzisz, że wysłanie żądania pobrania z treścią jest restrykcyjne, to jak wytłumaczyć [to] (https://stackoverflow.com/a/983458/1057791)? – BornToCode

+0

-1 Dlatego jest chaos z całą tą interpretacją. Gdyby semantyka byłaby ignorowana, dlaczego byłaby potrzeba tak wielu typów żądań. Interfejsy API RESTful nie powinny uwzględniać treści w punktach końcowych GET. Elastyczny stos jest po prostu hacky i nie dojrzały, wiele pracy do wykonania na nim (jak większość nowych projektów open source, nic w tym złego, czas na poprawę). Jeśli nie było ciała w GET, nie było potrzeby alternatywnego punktu końcowego POST ... To dlatego jest chaos, nie ma konwencji. Właściwie jestem za pozostawieniem ścieżki w adresie URL, aby zdecydować, ale REST został zaprojektowany do używania HTTP semanti –

+0

Jeden typ żądania HTTP, aby rządzić nimi wszystkimi, w najlepszy sposób i najbardziej elastyczny według mojej opinii, pozostawiając elastyczność tym, którzy implementują i używają protokół, poprzez adres URL. w ten sposób nie będzie żadnych niejasności z niektórymi punktami końcowymi (co dokładnie robią). Naprawdę nie jestem fanem REST. Jestem fanem prostoty i elastyczności oraz rzeczy, które są łatwe do zrozumienia na pierwszy rzut oka –

Powiązane problemy