Подолання компромісу між GET та POST
Протягом багатьох років розробники API стикалися з дилемою під час проєктування систем пошуку та фільтрації. Метод GET є семантично чистим та безпечним для читання даних, однак він передає всі параметри безпосередньо в URL. Це призводить до обмежень на довжину адреси в браузерах та на проксі-серверах, а також створює ризики витоку чутливих даних у системні логи. Як альтернативу розробники використовували POST, який дозволяє надсилати великі обсяги структурованих даних у форматі JSON у тілі запиту.
Проте використання POST суперечить архітектурі REST, оскільки цей метод вважається «небезпечним» та неідемпотентним — сервер припускає, що такий запит може змінити його стан. Через це проміжні вузли мережі, як-от CDN та реверс-проксі, не кешують результати POST-запитів і не повторюють їх автоматично в разі збою зв'язку.
Рішення у специфікації RFC 10008
Новий метод QUERY, розроблений за участі інженерів з компаній Cloudflare, Akamai та greenbytes, пропонує гібридний підхід. Він успадковує безпеку та ідемпотентність методу GET, але водночас офіційно дозволяє передавати тіло запиту, як це робить POST. Це дає розробникам можливість будувати гнучкі інтерфейси для складних пошукових запитів, наприклад, для GraphQL або вкладених JSON-фільтрів.
Ключовою перевагою QUERY є його повна сумісність із мережевим кешуванням. Якщо проксі-сервер або CDN налаштовані на роботу з новим стандартом, вони включають вміст тіла запиту до ключа кешування. У результаті повторні пошукові запити з однаковими параметрами обслуговуватимуться миттєво з кешу на межі мережі, не навантажуючи основну базу даних додатка.
Перешкоди на шляху до адаптації
Попри офіційну публікацію RFC 10008, розгортання методу QUERY на практиці натрапляє на труднощі. Бамагаючи застарілих брандмауерів вебдодатків (WAF) та балансувальників навантаження розпізнають лише класичний набір методів і можуть блокувати або відхиляти QUERY-запити як потенційні загрози. Окрім цього, на рівні браузерів використання нового методу наразі викликає запуск попереднього preflight-запиту OPTIONS через правила CORS. Творці стандарту зазначають, що повноцінна інтеграція в екосистему мов програмування та вебфреймворків триватиме кілька років, доки розробники інструментарію не оновлять свои маршрутизатори.