TGViewer
твиттерэда | QA: резюме, собесы, оффер твиттерэда | QA: резюме, собесы, оффер @twitereda · 3.3K subscribers
Post #534 2.48K
У нас появился новый метод HTTP, который называется QUERY.

По сути, он как GET, но при этом у него есть body, как у POST-запроса.
Отвечая на логичный вопрос: «А нахуя он вообще нужен?» — я отвечу.
Он нужен для тех ситуаций, когда мы ничего не меняем на сервисе, на сервере, но при этом создаём какой-то сложный поисковый запрос с большим набором фильтров.
В целом, когда мы хотим получить какие-то данные, мы отправляем GET-запрос. Но есть проблема: у него нет тела запроса, и, соответственно, все данные передаются в URL.
Если фильтров много или они сложные, много условий, какие-то вложенные JSON, пагинация, сортировка и так далее, URL становится огромным, нечитаемым и может упереться в лимиты.
Либо он попадает в логи, историю браузера, и, если в фильтрах есть какие-то чувствительные данные, это, соответственно, плохо.

Что же используют вместо GET-запроса?
В таком случае используют POST-запрос. Просто в body складывают все необходимые фильтры. На этом, собственно, всё.
Несмотря на то, что POST в RESTful — это про изменение данных, он использовался как раз-таки для таких запросов.
И наш новый метод, по сути, решает именно эту проблему.
При этом он уже стандартизирован, но на самом деле пока что какого-то массового использования у него нет, потому что он опубликован буквально в прошлом месяце. Сейчас в основном встречаются всякие тестовые реализации.
Я хотел найти и показать вам, как он используется, но мы позже об этом проговорим.
Нам нужно понимать, что GET у нас безопасный и идемпотентный запрос, но параметры у него обычно передаются в URL.
POST может передать нам сложное тело, но это не обязательно безопасная или идемпотентная операция.
А QUERY — это безопасный и идемпотентный запрос с полноценным телом.
Сейчас какой-то реальной поддержки этого запроса нет. Я думаю, что в ближайшем будущем будет. Я здесь солидарен с Валентином Кимом.

Но давайте посмотрим, как он может выглядеть в Chrome прямо через DevTools, и заодно посмотрим на POST-запрос, который используется в таких случаях, когда нам это нужно.

- Открой любой сайт.
- Нажми F12.
- Перейди в Console.
- Выполни:
fetch("https://httpbin.org/anything", {
method: "QUERY",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
filters: {
status: "ACTIVE"
},
page: 0,
size: 20
})
})
.then(response => response.json())
.then(console.log)
.catch(console.error);

- После этого открой Network, найди anything и посмотри:
Request Method: QUERY

Возможен нюанс: из-за CORS сначала появится запрос OPTIONS, а сам QUERY может быть заблокирован сервером. Это как раз одна из текущих проблем нового метода.

А для POST-запроса с большим количеством фильтров и сортировкой можно сделать следующее:

- Открой:
https://fontawesome.com/search

- Открой DevTools → Network.
- Включи фильтр Fetch/XHR.
- В строке поиска введи, например, user.
- Выбери несколько фильтров: стиль, категорию, бесплатные или платные и так далее.
- Найди запрос, в адресе которого есть:
algolianet.com/1/indexes/*/queries

У него должен быть:
Request Method: POST
При этом запрос только ищет и возвращает иконки. Он не создаёт новую сущность.

Думаю астрологи объявят совсем скоро неделю вопросов про новый запрос, этакая проверка слежки за новостями

прочесть про сам метод: https://www.rfc-editor.org/rfc/rfc10008.html
  • ❤ 26
  • 🔥 16
  • 👍 10
More from @twitereda
  1. Sep 21, 2026После нескольких консультаций по поводу поиска работы чуть пригорело в пятой точке Казалос…
  2. Sep 18, 2026Друзья, нужна ваша помощь У нашего ученика Вадима нашли рак ободочной кишки в 19 лет. Несм…
  3. Aug 20, 2026photo post
  4. Aug 14, 2026Post #552
  5. Aug 13, 2026В этом видео мы с Женей поговорили про нагрузочное тестирование, направление, которое поче…
  6. Aug 8, 2026video post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →