В июне 2026 года IETF официально стандартизировал новый HTTP-метод - QUERY (RFC 10008). Это первое крупное расширение HTTP за многие годы, которое решает проблему, с которой практически каждый backend-разработчик сталкивался при проектировании API.

На протяжении десятилетий существовала странная ситуация. Предположим, мы разрабатываем API поиска товаров.

Самый очевидный вариант: GET /products?category=laptop&brand=apple&page=1

Все отлично.

Но что делать, если фильтр становится сложнее?

{
  "category": "laptop",
  "price": {
    "min": 1000,
    "max": 4000
  },
  "brands": [
    "Apple",
    "Dell",
    "Lenovo"
  ],
  "features": [
    "wifi6",
    "oled",
    "touch"
  ],
  "sort": {
    "field": "rating",
    "direction": "desc"
  }
}

Запихнуть это в URL практически невозможно.

Начинаются проблемы:

  • огромные query string;
  • ограничения браузеров и прокси;
  • плохая читаемость;
  • сложное кодирование массивов;
  • проблемы с логированием.

Поэтому почти все делают так: POST /products/search с JSON в body.

Работает. Но семантически это неправильно.


В чем проблема POST?

По стандарту HTTP:

  • POST потенциально изменяет состояние сервера;
  • POST не считается безопасным методом;
  • POST не является идемпотентным.

Это означает, что инфраструктура не может автоматически предполагать безопасный повтор запроса.

Хотя на практике ваш endpoint просто выполняет поиск. Получается интересная ситуация: Мы используем POST только потому, что GET не умеет нормально работать с большим body.

Именно эту проблему решает QUERY.


Что такое HTTP QUERY?

QUERY - это новый HTTP-метод, который:

  • является безопасным (Safe);
  • является идемпотентным (Idempotent);
  • поддерживает Request Body.

Другими словами: QUERY - это "POST с семантикой GET".

Именно этого не хватало HTTP много лет. RFC определяет QUERY как безопасный и идемпотентный метод с телом запроса для описания самой операции поиска или запроса.

Вместо:

POST /products/search

можно написать:

QUERY /products
Content-Type: application/json

{
  "brand": "Apple",
  "price": {
    "min": 1000,
    "max": 3000
  }
}

При этом сервер гарантирует:

  • никакого изменения данных;
  • можно повторять запрос сколько угодно раз;
  • можно безопасно кэшировать.

Что означает Safe?

Safe - одно из ключевых понятий HTTP.

Безопасный метод:

  • ничего не удаляет;
  • ничего не создает;
  • ничего не изменяет.

GET безопасен.

HEAD безопасен.

OPTIONS безопасен.

Теперь QUERY тоже безопасен.


Что означает Idempotent?

Идемпотентность означает: 100 одинаковых запросов дают тот же результат, что и один запрос.

Например:

QUERY /search

можно отправить один раз, пять раз, сто раз.

Состояние сервера не изменится.

Поэтому инфраструктура может автоматически повторять запрос после временных сетевых ошибок.


Итоги

Появление QUERY - одно из самых заметных изменений в HTTP за последние годы. Новый метод закрывает давний пробел между GET и POST: он позволяет отправлять сложные структуры данных в теле запроса, сохраняя при этом семантику безопасной операции чтения. Для разработчиков это означает более корректное проектирование API, возможность безопасных повторных запросов, лучшую совместимость с HTTP-кэшированием и отказ от компромисса, когда для обычного поиска приходилось использовать POST.

Однако массовое внедрение займет время. Серверы, прокси, API-шлюзы, браузеры и фреймворки должны добавить полноценную поддержку QUERY. Поэтому в ближайшие годы POST еще останется основным способом реализации сложных поисковых запросов. Тем не менее RFC 10008 уже стал официальным стандартом, а значит, экосистема HTTP получила новый фундаментальный инструмент, который со временем вполне может стать таким же привычным, как GET, POST или PATCH.


Source: Orkhan Alishov's notes