私たちは社内でAPIを構築しており、多くの場合、複数の値を持つパラメーターを渡します。
彼らは使用します:mysite.com?id = 1&id = 2&id = 3
代わりに:mysite.com?id = 1,2,3
私は2番目のアプローチを好みますが、最初のアプローチを実際に行うのが間違っているかどうか興味がありましたか?
私たちは社内でAPIを構築しており、多くの場合、複数の値を持つパラメーターを渡します。
彼らは使用します:mysite.com?id = 1&id = 2&id = 3
代わりに:mysite.com?id = 1,2,3
私は2番目のアプローチを好みますが、最初のアプローチを実際に行うのが間違っているかどうか興味がありましたか?
私はHTTPの第一人者ではありませんが、複数の値に関するURLのクエリ部分に明確な標準がないことを理解していることから、クエリ文字列を解析するリクエストを処理するのは通常CGI次第です。
RFC 1738のセクション3.3には、searchpart
とが記載?
されていますが、その形式については詳しく説明されていないようです。
http://<host>:<port>/<path>?<searchpart>
私は、どのRFC標準がそれを定義しているかをチェックしませんでした。(これを知っている人は、コメントに参照を残してください。)しかし、実際にはmysite.com?id=1&id=2&id=3
、フォームに重複するフィールド(通常はチェックボックス)が含まれている場合にブラウザーが生成する方法はすでにあります。このw3schoolsのサンプルページで実際の動作を確認してください。したがって、使用しているプログラミング言語が何であれ、そのような入力を解析するためのいくつかのヘルパー関数がすでに提供されており、おそらくリストが返される可能性があります。
もちろん、のような独自のアプローチを採用することもできますが、mysite.com?id=1,2,3
この特定のケースではまったく悪くありません。ただし、そのような形式を生成および使用するには、独自のロジックを実装する必要があります。ここで、次のようないくつかのコーナーケースを自分で処理することを考える必要がある場合とない場合がありますmysite.com?id=1,2,
。また、カンマ記号自体も有効な入力になる可能性がある場合は、さらに別の区切り文字を作成する必要がありますmysite.com?name=Doe,John|Doe,Jane
か?次のように、値としてjson文字列を使用するようになりmysite.com?name=["John Doe", "Jane Doe"]
ますか?などなど。あなたのマイレージは異なる場合があります。
サーバー上のURLで重複するパラメーターの処理に一貫性がないことは、脆弱性、特にサーバー側のHTTPパラメーターの汚染につながる可能性があることを追加する価値があります。実際の例-クライアント側のHttpパラメーターの汚染-Yahoo! クラシックメールビデオPoc。
最初のアプローチではクエリ文字列値の配列を取得しますが、2番目のアプローチではクエリ文字列値の文字列を取得します。
使用する技術や便利さにもよると思います。私は現在、currency=USD,CHF
またはを使用して同じ質問の前に立っていますcurrency=USD¤cy=CHF
私はThymeleafを使用していますが、2番目のオプションを使用すると作業が簡単になり、次のようにリクエストできます${param.currency.contains(currency.value)}
。最初のオプションを使おうとすると、文字列のような「配列」が必要になるようです。そのため、最初に分割してから含む必要があります。これにより、コードがさらに混乱します。
ちょうど私の50セント:-)