その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Plack::Request::WithEncoding というモジュールをリリースしました

Plack::Request::WithEncoding というモジュールをリリースしました.
https://metacpan.org/module/Plack::Request::WithEncoding
https://github.com/moznion/Plack-Request-WithEncoding

これは何

このモジュールは Plack::Request のサブクラスで,
Request Parameter に対して decode 処理を行ってくれる便利なやつです.
大体の動作としては POD,特に SYNOPSIS に書いてある通りです.

経緯

この手の decode 処理は WAF を作る時なんかに職人が心を込めて丁寧に記述すると思うんですが,
「その度にいちいち再発明とかコピペするのはだるいよね~」みたいな話を
YAPC の時に HUB で @ さんや @ さんとしていて,
ほいじゃまあ折角なので書きますかって感じで書いたのがこちらになります.
あと,Request の decode をよしなにやってくれるので,生 psgi でアプリを書く時も簡単になるので良い感じですね.
(なおこのモジュールを書くにあたっては,@songmu さんをはじめとする有識者の皆様に大変お世話になりました!)

舞台裏

ただこの実装法,つまり Plack::Request を継承して実装する方法は賛否両論あって,
どちらかと言うと否の方が多い感じで (なぜかと言うと Plack::Request の実装が変更された場合に動作がおかしくなるので.
例えば `param()` を使った新しいメソッドが生えた時とか),
継承ではなく delegate によって実装した方が良いのでは無いかという意見も受けましたが,
Plack::Request の名前を冠している以上、Plack::Request との統一的なインターフェースを提供するべきであるという意識と,
delegate により実装したとしても Plack::Request に変更が生じた場合はそれに追随する必要があるので,
メンテのコストはそこまで変わらないかな~という曖昧な見積もりによって,今回のような継承による実装を採用するに至りました.
まあ他の WAF も大体継承して実装してるしね!

なのでメンテの際には頑張って Plack::Request に追随していきたい感じです。


Enjoy!