Lição 2
Modelos de parâmetros de query
Entenda chaves repetidas, valores vazios, flags, arrays e diferenças entre frameworks.
Query strings parecem pares simples de chave e valor, mas frameworks diferentes as modelam de formas diferentes.
?tag=api&tag=json&draft=&preview
Um parser pode enxergar:
tagcomo dois valoresdraftcomo string vaziapreviewcomo flag ou valor vazio
Chaves repetidas
Chaves repetidas são válidas em uma query string:
?tag=frontend&tag=backend
Alguns frameworks mantêm o último valor. Outros coletam todos em um array. Outros exigem uma convenção como tag[].
Valores vazios e flags
Estas formas não são idênticas em todo sistema:
?debug
?debug=
?debug=true
Se o servidor trata presença como true, ?debug pode bastar. Se espera uma string booleana, talvez precise de debug=true.
Ordem
Para filtros comuns, a ordem dos parâmetros geralmente não importa. Para assinaturas e chaves de cache, pode importar muito. URLs assinadas costumam exigir ordem canônica e percent-encoding exato.
Modelo mental mais seguro
Não assuma que fazer parse e reconstruir uma query é inofensivo. Decida como sua aplicação trata:
- Chaves repetidas
- Strings vazias
- Valores ausentes
- Sintaxe de array
- Ordenação
- Codificação de espaços e sinais de mais
Quando essas regras ficam explícitas, bugs de URL ficam muito mais fáceis de reproduzir.