Tutti gli articoli

Query string contro JSON: perché i parametri GET sono così limitati

La query string di un URL è il formato di trasmissione dati più semplice che esista: un elenco di coppie chiave=valore separate da &. Ma questa semplicità diventa un problema non appena serve inviare qualcosa di più complesso di un elenco piatto di stringhe.

Perché la query string è limitata

Questo formato è stato pensato storicamente per i semplici form HTML e non ha alcun concetto nativo di tipi di dato, annidamento o array. Tutto ciò che contiene è testo, quindi il numero 42 e la stringa "42" sono indistinguibili finché del codice non li interpreta esplicitamente.

Codificare gli array: la convenzione di PHP

PHP, spesso tramite WordPress o framework come Laravel (lo stesso che alimenta questo sito), resta uno degli ecosistemi backend più diffusi tra gli sviluppatori italiani, anche grazie alla grande disponibilità di hosting economici basati su PHP. PHP interpreta nativamente tags[]=a&tags[]=b come un array, e filtro[stato]=attivo come una struttura annidata, senza bisogno di librerie aggiuntive. Altri ecosistemi seguono convenzioni diverse: ASP.NET, per esempio, si aspetta di solito la stessa chiave ripetuta senza parentesi quadre (tags=a&tags=b). Se client e server non concordano sulla convenzione, i dati dell'array vengono silenziosamente persi o corrotti.

Perché JSON risolve questo problema

JSON ha tipi nativi (numeri, booleani, null) e supporta in modo naturale oggetti e array annidati senza bisogno di alcuna convenzione di codifica. Per questo i dati complessi nel body di una richiesta POST vengono solitamente inviati come JSON, mentre la query string resta riservata a parametri semplici e piatti come filtri o numero di pagina.

A cosa serve

  • Verificare esattamente in che formato il backend si aspetta un parametro array nella query string.
  • Convertire i parametri dell'URL in JSON per facilitare il debug.
  • Capire perché una struttura dati complessa è meglio inviarla al di fuori dei parametri GET.

Limite di lunghezza dell'URL

La maggior parte dei browser e dei server limita la lunghezza dell'URL a circa 2000 caratteri (il valore esatto varia in base al browser e al server web), quindi la query string non è fisicamente adatta a trasportare grandi quantità di dati. Questo è un altro motivo per cui le richieste POST con body JSON sono la scelta standard per form complessi o dati array, mentre GET con query string resta riservato a parametri brevi e semplici.

Prova lo strumento