Рядок запиту URL (query string) — це найпростіший формат передачі даних, який існує: список пар ключ=значення, розділених амперсандом. Але ця простота стає проблемою, щойно потрібно передати щось складніше за плоский список рядків.
Чому query string обмежений
Формат query string історично проєктувався для простих форм HTML і не має вбудованого поняття типів даних, вкладеності чи масивів. Усе в ньому — це просто текстові рядки, тож число 42 і рядок "42" невідрізнимі одне від одного, поки код їх явно не розпарсить.
Як кодують масиви й вкладені об'єкти
Немає єдиного стандарту для передачі масивів через query string — різні бекенд-фреймворки використовують різні конвенції: tags[]=a&tags[]=b, tags=a,b або tags[0]=a&tags[1]=b. Якщо клієнт і сервер очікують різні конвенції, дані просто губляться або спотворюються.
Чому JSON вирішує цю проблему
JSON має вбудовані типи (числа, булеві значення, null) і природну підтримку вкладених об'єктів і масивів без жодних домовленостей про кодування. Саме тому складні дані в тілі POST-запиту зазвичай передають як JSON, а query string залишають для простих плоских параметрів на кшталт фільтрів чи сторінки пагінації.
Навіщо це потрібно
- Перевірити, як саме бекенд очікує отримати масив параметрів у query string.
- Конвертувати параметри URL у JSON для зручнішого налагодження.
- Зрозуміти, чому складну структуру даних краще передавати не через GET-параметри.
Обмеження довжини URL
Більшість браузерів і серверів обмежують довжину URL приблизно 2000 символами (точне значення залежить від браузера й вебсервера), тож query string фізично не підходить для передачі великих обсягів даних. Це ще одна причина, чому POST-запити з тілом JSON — стандартний вибір для складних форм чи масивів даних, тоді як GET із query string лишається для коротких, простих параметрів.