本当にただのメモ

なるべく Qiita に投稿しよう

Plack::Request の body とか content の使い分け

いつも迷って調べるのでメモ。 https://metacpan.org/pod/Plack::Request

結論

フォームデータなら ->body_parameters

Returns a reference to a hash containing posted parameters in the request body (POST). As with query_parameters, the hash reference is a Hash::MultiValue object.

書いてあるとおり、Hash::MultiValue オブジェクトが返る。

my $foo = $req->body_parameters->{foo};

JSON API なら ->content ( もしくは ->raw_body )

raw_body は content のエイリアス。

my $foo = decode_json($req->content)->{foo}

ちなみに

->body は plack.input ハンドルというのが返る。

よっぽど巨大な content を扱う場合でなければあまり使うことなさそう。