Analise e reconstrua query strings sem perder semântica
Parâmetros repetidos, valores vazios e URLs aninhadas se comportam de formas diferentes — separe a query antes de codificar ou ordenar de novo.
Logs e barras de endereço mostram uma query opaca. Callbacks OAuth, verificação de webhook e tags de analytics dependem de parâmetros que sobrevivem idênticos na ida e volta.
O erro raro é “o parser quebrou”. O comum é tratar codificar, ordenar e serializar como um único passo reversível.
Comece pela visão geral do fluxo de depuração de API. Armadilhas de encoding em OAuth estão em bugs de URL em redirects OAuth.
URL vs query string
URL completa tem scheme, host, path, query e às vezes fragment. Muitos bugs vêm de codificar o path quando você queria um valor de query — ou de reconstruir depois que a biblioteca já decodificou uma vez.
Comece separando componentes com o Analisador de URL.
Parâmetros repetidos e vazios
Algumas APIs usam /search?tag=go&tag=api; outras colapsam duplicatas. state= não é o mesmo que omitir state. Antes de “limpar” a query, saiba se o servidor compara string bruta ou mapa parseado.
URLs aninhadas e OAuth
redirect_uri, return_to e blocos UTM embutem outra URL dentro de um valor. O parser externo não pode dividir ? ou & internos.
Codifique a URL interna como um valor, depois coloque na query externa. Use o Codificador / Decodificador de URL um componente por vez.
Ordenar e reconstruir
Ordenar ajuda a diff duas requisições, mas muda semântica se o upstream assina a query bruta em ordem fixa. Ao reconstruir, preserve chaves repetidas quando o contrato exige e compare strings com o Comparador de texto.
Fluxo prático
- Parse a URL logada sem mutar segmentos codificados não inspecionados.
- Corrija um limite de parâmetro por vez.
- Re-codifique só a camada que precisa mudar.
- Quando assinatura importa, compare byte a byte.
Query parece trivial até auth, cache ou analytics depender dela — separar parse, encode e rebuild deixa as camadas visíveis.
Veja também ferramentas locais para depuração de API.