Bir URL'nin query string'i var olan en basit veri aktarım biçimidir: & işaretiyle ayrılmış anahtar=değer çiftlerinden oluşan bir liste. Ama düz bir string listesinden daha karmaşık bir şey göndermeniz gerektiği anda bu basitlik soruna dönüşür.
Query string neden sınırlıdır
Bu format tarihsel olarak basit HTML formları için tasarlanmıştır ve veri tipi, iç içe geçme (nesting) ya da dizi (array) kavramlarını doğal olarak içermez. İçindeki her şey metindir, bu yüzden 42 sayısı ile "42" dizesi, bir kod bunları açıkça ayrıştırana kadar birbirinden ayırt edilemez.
Dizileri kodlamak: tek bir standart yok
Query string içinde dizileri kodlamanın tek bir standardı yoktur; farklı backend ekosistemleri farklı kurallar benimsemiştir. PHP, tags[]=a&tags[]=b yazımını herhangi bir ek kütüphane gerekmeden doğrudan diziye, filter[status]=aktif yazımını ise iç içe bir yapıya çevirir. ASP.NET tabanlı sistemlerde ise genellikle aynı anahtarın köşeli parantez olmadan tekrarlanması beklenir: tags=a&tags=b. Java/Spring tabanlı kurumsal sistemlerde ise virgülle ayrılmış değerler (tags=a,b) da sıkça görülür. İstemci ve sunucu farklı bir kural bekliyorsa, dizi verisi sessizce kaybolur veya bozulur.
JSON bu sorunu neden çözer
JSON, sayı, boolean ve null gibi yerleşik veri tiplerine sahiptir ve hiçbir kodlama anlaşması gerektirmeden iç içe nesneleri ve dizileri doğal olarak destekler. Bu yüzden bir POST isteğinin gövdesindeki karmaşık veriler genellikle JSON olarak gönderilirken, query string filtre veya sayfa numarası gibi basit ve düz parametreler için ayrılır.
Ne işe yarar
- Backend'in query string'de bir dizi parametresini tam olarak hangi biçimde beklediğini kontrol etmek.
- Hata ayıklamayı kolaylaştırmak için URL parametrelerini JSON'a dönüştürmek.
- Karmaşık bir veri yapısının neden GET parametreleri dışında gönderilmesinin daha iyi olduğunu anlamak.
URL uzunluğu sınırı
Çoğu tarayıcı ve sunucu, URL uzunluğunu yaklaşık 2000 karakterle sınırlar (kesin değer tarayıcıya ve web sunucusuna göre değişir), bu yüzden query string büyük miktarda veri taşımaya fiziksel olarak uygun değildir. Bu, karmaşık formlar veya dizi verileri için JSON gövdeli POST isteklerinin standart tercih olmasının, query string'li GET'in ise kısa ve basit parametrelere ayrılmasının bir başka nedenidir.