В поисках Elasticsearch параметры строки запроса для запросов GET и «Query DSL» для запросов POST функционально эквивалентны? - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь создать небольшое приложение, которое отображает несколько простых визуализаций из данных, проиндексированных в Elasticsearch (в управляемой службе AWS Elasticsearch).

Поскольку, насколько мне известно, степень контроля доступа, которую AWS предлагает для своей службы ES, основана на разрешении заданных c HTTP-глаголов (GET, POST и т. Д. c), чтобы упростить мою жизнь и администраторов ES, я даю этому приложению права «только для чтения», поэтому только GET и HEAD .

Однако , я вижу, что для своего API поиска ES предоставляет конечную точку GET, которая работает с параметрами строки запроса, и конечную точку POST, которая работает с основанным на JSON «Query DSL». Этот DSL кажется предпочтительным методом во всех примерах, которые я видел в Интернете и в книгах.

Учитывая преобладание Query DSL в документации, мне было интересно:

  1. Предоставляет ли Query DSL функциональность, которой нет у стандартных параметров строки запроса, или они оба функционально эквивалентны?
  2. В результате конечная точка поиска POST приводит к тому, что любые данные фактически POSTED или это только обходной путь, позволяющий отправить JSON как запрос, который немного нарушает соглашения REST?

1 Ответ

1 голос
/ 09 апреля 2020
  1. Согласно документам

    You can use query parameters to define your search criteria directly in the request URI, rather than in the request body. Request URI searches do not support the full Elasticsearch Query DSL, but are handy for testing.

  2. GET поведение немного сбивает с толку, но даже Кибана отправляет POST в фоновом режиме, когда вы выполняете GET с телом. Если у вас есть для использования GET, некоторые результаты запроса могут быть неожиданными. Какой у вас точный вариант использования? Какие запросы мы говорим?

К вашему сведению более полезная информация: здесь и здесь .

...