9

HTTP GET クエリ文字列は、キーと値のペアの順序付けられたシーケンスです。

?spam=eggs&spam=ham&foo=bar

特定のセマンティクスでは、次の辞書と同等です。

{'spam': ['eggs', 'ham'], 'foo': bar}

これは、要求されているページのブール値のプロパティに対してうまく機能します。

?expand=1&expand=2&highlight=7&highlight=9
{'expand': [1, 2], 'highlight': [7, 9]}

ID 2 の要素の展開を停止する場合は、expand値からポップして、クエリ文字列を再度 URL コード化します。ただし、よりモーダルなプロパティ (3 つ以上の選択肢がある) がある場合は、次のような構造を表現する必要があります。

{'highlight_mode': {7: 'blue', 9: 'yellow'}}

対応する ID キーの値は、既知の列挙の一部です。これをクエリ文字列にエンコードする最良の方法は何ですか? 次のような2つのタプルのシーケンスを使用することを考えています:

?highlight_mode=(7,blue)&highlight_mode=(9,yellow)

編集:慣習に関連する名前を知っておくとよいでしょう。何もないかもしれないことはわかっていますが、例の代わりに名前を使用して特定のことについて話すことができるのは素晴らしいことです. ありがとう!

4

4 に答える 4

9

通常の方法は、次のようにすることです。

highlight_mode[7]=blue&highlight_mode[9]=yellow

AFAIR、かなりの数のサーバー側言語が実際にこれをそのままサポートしており、これらの値の優れた辞書を生成します。

于 2009-01-11T00:15:43.143 に答える
4

また、ネストされた辞書を JSON エンコードし、それを BASE64 (または同様のもの) でさらにエンコードし、結果の混乱全体を単一のクエリ文字列パラメーターとして渡す人も見てきました。

かなり醜い。

一方、POST を使用して問題を解決できる場合、JSON はこの種の情報をやり取りするための非常に優れた方法です。

于 2009-01-11T00:19:05.413 に答える
3

多くの Web フレームワークでは、あなたの言うこととは異なる方法でエンコードされています。

{'foo': [1], 'bar': [2, 3], 'fred': 4}

だろう:

?foo[]=1&バー[]=2&バー[]=3&フレッド=4

配列の回答が単純な回答とは異なる必要がある理由は、デコード層が、あまり一般的でない foo のケース (たまたま単一の要素を持つ配列) と、非常に一般的な fred のケース (単一要素) を自動的に区別できるようにするためです。

この表記法は、次のように推測できます。

?highlight_mode[7]=青&highlight_mode[9]=黄

配列だけでなくハッシュがある場合。

これは、Rails や、Rails をコピーしたほとんどのフレームワークが行っていることとほとんど同じだと思います。

空の配列、空のハッシュ、およびスカラー値の欠如は、このエンコーディングでは同じように見えますが、それについてできることはあまりありません。

この [] は、いくつかのフレームウォーを引き起こしているようです。ブラウザー、トランスポート層、およびクエリ文字列エンコーダーは気にしないため、不要であると見なす人もいます。気にする唯一のことは、自動クエリ文字列デコーダーです。[] を使用する Rails の方法をサポートします。別の方法としては、スカラーを抽出するメソッドとクエリ文字列から配列を抽出するメソッドを別々に用意することです。これは、プログラムがいつ [1] を必要とするか、4 を必要とするかを自動的に判断する方法がないためです。

于 2009-01-11T01:51:15.230 に答える