レッスン 2
クエリパラメータモデル
繰り返しキー、空値、フラグ、配列、フレームワークの違いを理解します。
クエリ文字列は単純なキーと値のペアに見えますが、フレームワークによってモデル化の仕方が異なります。
?tag=api&tag=json&draft=&preview
パーサーは次のように解釈するかもしれません。
tagを 2 つの値draftを空文字列previewをフラグ、または空値
繰り返しキー
クエリ文字列では繰り返しキーは合法です。
?tag=frontend&tag=backend
フレームワークによっては最後の値だけを保持し、すべてを配列に集め、tag[] のような命名規則を要求するものもあります。
空値とフラグ
すべてのシステムで同一ではありません。
?debug
?debug=
?debug=true
サーバーが存在を true とみなすなら、?debug で十分な場合があります。ブール文字列を期待するなら、debug=true が必要かもしれません。
順序
通常のフィルタリングでは、パラメータの順序は通常重要ではありません。署名とキャッシュキーでは、順序が非常に重要になることがあります。署名付き URL では、正規順序と正確なパーセントエンコーディングが必要なことが多いです。
より安全なメンタルモデル
クエリのパースと再構築が無害だと仮定しないでください。アプリケーションが次をどう扱うか決めてください。
- 繰り返しキー
- 空文字列
- 欠落値
- 配列構文
- ソート
- スペースとプラス記号のエンコーディング
これらの規則が明示的になると、URL バグの再現がはるかに容易になります。