Wszystkie artykuły

Query String kontra JSON: dlaczego parametry GET są tak ograniczone

Query string w adresie URL to najprostszy istniejący format przesyłania danych: lista par klucz=wartość rozdzielonych znakiem &. Ta prostota staje się jednak problemem, gdy trzeba przesłać coś bardziej złożonego niż płaska lista tekstów.

Dlaczego query string jest ograniczony

Format ten zaprojektowano historycznie z myślą o prostych formularzach HTML i nie ma on wbudowanego pojęcia typów danych, zagnieżdżenia ani tablic. Wszystko w nim jest tekstem, więc liczba 42 i ciąg "42" są nierozróżnialne, dopóki jakiś kod nie zinterpretuje ich jawnie.

Kodowanie tablic: konwencja OpenAPI kontra konwencja PHP

Polska to jeden z największych europejskich rynków outsourcingu IT, gdzie ogromną rolę odgrywają zespoły Java/Spring pracujące dla klientów zagranicznych — a takie systemy enterprise często opierają się na specyfikacji OpenAPI, która dla parametrów tablicowych zaleca powtórzony klucz (tags=a&tags=b) albo wartości rozdzielone przecinkami (tags=a,b). Systemy oparte na PHP rozumieją natomiast natywnie notację z nawiasami kwadratowymi tags[]=a&tags[]=b jako tablicę, bez żadnej dodatkowej biblioteki. Jeśli klient i serwer nie zgadzają się co do konwencji, dane tablicowe po cichu giną albo ulegają zniekształceniu — to klasyczny błąd na styku systemów budowanych przez różne zespoły.

Dlaczego JSON rozwiązuje ten problem

JSON ma wbudowane typy (liczby, wartości logiczne, null) i naturalnie obsługuje zagnieżdżone obiekty oraz tablice bez żadnych umów co do kodowania. Dlatego złożone dane w treści żądania POST zwykle wysyła się jako JSON, a query string zostawia się dla prostych, płaskich parametrów, takich jak filtry czy numer strony.

Do czego się to przydaje

  • Sprawdzić dokładnie, w jakim formacie backend oczekuje parametru tablicowego w query string.
  • Przekonwertować parametry adresu URL na JSON dla wygodniejszego debugowania.
  • Zrozumieć, dlaczego złożoną strukturę danych lepiej przesyłać inaczej niż parametrami GET.

Ograniczenie długości adresu URL

Większość przeglądarek i serwerów ogranicza długość adresu URL do około 2000 znaków (dokładna wartość zależy od przeglądarki i serwera WWW), więc query string fizycznie nie nadaje się do przesyłania dużych ilości danych. To kolejny powód, dla którego żądania POST z treścią JSON są standardowym wyborem dla złożonych formularzy czy danych tablicowych, podczas gdy GET z query string pozostaje zarezerwowany dla krótkich, prostych parametrów.

Wypróbuj narzędzie