10.3 HTTPのリクエストのパース

ブラウザからのリクエストはほぼJSONになっているということは最初に説明しました。しかし、いくつかの状況では、以前から使われてきたリクエストの方式を扱う必要があります。

  • GETメソッド時のパラメーター(クエリー)

  • ファイルアップロードでのマルチパート形式

10.3.1 クエリーのパース

HTTPのGETメソッドのリクエストは、サーバーの状態を変えない、情報の取得を目的としたリクエストです。GETメソッドでボディの送信は非推奨となっており、リクエスト時に送信したいパラメーターはURLにクエリーの形式(クエリーパラメーターと言います)で付与します。GETメソッドでは、CDNで同一のURLには常に同じ内容を返すという設定ができ、同じパラメーターを持つリクエストはキャッシュされるため、システムの応答性を改善しやすいという特徴があります。

http://example.com/method?param1=value1&param2=value2

無理やりエスケープすることでJSONを載せることはできますが、エスケープにより大幅に文字数が増えますし可読性も高くないため、メリットはあまりありません。

これらのパラメーターはhttp.RequestFormValue()メソッドで取得できます。このメソッドはGETのパラメーター以外に、HTMLのフォーム送信(POSTメソッド)のapplication/x-www-form-urlencoded形式のリクエストで渡された情報も同じように取得できるため、一石二鳥なメソッドです。

なお、クエリーは同一のキーで複数の値を渡すことができますが、このメソッドでは1つの値のみを返します。もし複数の値を取得したい場合は、 ...