Der Query-String einer URL ist das denkbar einfachste Datenformat: eine Liste von schlüssel=wert-Paaren, getrennt durch kaufmännische Und-Zeichen. Genau diese Einfachheit wird zum Problem, sobald mehr als eine flache Liste von Zeichenketten übertragen werden soll.
Warum der Query-String begrenzt ist
Das Format wurde historisch für einfache HTML-Formulare entworfen und kennt von Haus aus keine Datentypen, keine Verschachtelung und keine Arrays. Alles darin ist reiner Text, weshalb die Zahl 42 und die Zeichenkette "42" ununterscheidbar sind, bis Code sie explizit interpretiert.
Arrays kodieren: OpenAPI-Konvention gegen PHP-Konvention
In deutschen Unternehmen mit stark spezifikationsgetriebener API-Entwicklung (häufig Java/Spring-Backends) orientiert man sich oft an der OpenAPI-Spezifikation, die für Array-Parameter das Format style: form, explode: true (wiederholter Schlüssel: tags=a&tags=b) oder alternativ kommagetrennte Werte (tags=a,b) vorschlägt. PHP-basierte Systeme dagegen verstehen die eckige-Klammer-Notation tags[]=a&tags[]=b nativ als Array, ganz ohne zusätzliche Bibliothek. Stimmen Client und Server nicht überein, gehen die Array-Daten stillschweigend verloren oder werden falsch interpretiert — ein klassischer Fehler an API-Grenzen zwischen unterschiedlich gewachsenen Systemen.
Warum JSON dieses Problem löst
JSON verfügt über eingebaute Typen (Zahlen, Booleans, null) und unterstützt verschachtelte Objekte und Arrays nativ, ganz ohne Kodierungskonventionen. Deshalb werden komplexe Daten im Body einer POST-Anfrage meist als JSON übertragen, während der Query-String einfachen, flachen Parametern wie Filtern oder der Seitenzahl vorbehalten bleibt.
Wofür man das braucht
- Genau prüfen, in welchem Format ein Backend einen Array-Parameter im Query-String erwartet.
- URL-Parameter zur einfacheren Fehlersuche in JSON umwandeln.
- Verstehen, warum eine komplexe Datenstruktur besser nicht über GET-Parameter übertragen wird.
Begrenzung der URL-Länge
Die meisten Browser und Server begrenzen die URL-Länge auf etwa 2000 Zeichen (der genaue Wert hängt von Browser und Webserver ab), sodass sich der Query-String physisch nicht für große Datenmengen eignet. Das ist ein weiterer Grund, warum POST-Anfragen mit JSON-Body der Standard für komplexe Formulare oder Array-Daten sind, während GET mit Query-String kurzen, einfachen Parametern vorbehalten bleibt.