Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2012-04-10

HTTP レスポンスオブジェクトを簡単に作れる Perl モジュールを書きました

| 21:52 | HTTP レスポンスオブジェクトを簡単に作れる Perl モジュールを書きました - NaN days を含むブックマーク はてなブックマーク - HTTP レスポンスオブジェクトを簡単に作れる Perl モジュールを書きました - NaN days

2012-04-12: 特に DIS られませんでしたので shipit いたしました

app.psgi 1 ファイルだけの簡単な PSGI アプリを書くとき、200 やら 302 やら 501 を返すのにいちいち ArrayRef を書いて返すのが面倒なので、モジュールを書いて簡単にできるようにしてみました。

モジュールを use すると HTTP::Status が提供する定数と同じような名前の関数を定義し、これらの一つ一つがそのステータスコードに対応したレスポンスを生成する関数になっています。

use HTTP::Response::Maker::PSGI;
# もしくは use HTTP::Response::Maker 'PSGI';

my $app = sub {
    my $env = shift;

    if (oauth_required) {
        return FOUND [ Location => $oauth_auth_url ];
    }
    elsif (json_api) {
        return OK [ 'Content-Type' => 'application/json' ], $json;
    }
    elsif (some_path) {
        return OK $html;
    }

    NOT_IMPLEMENTED;
};

それぞれの関数は引数を 1 つまたは 2 つ受け付け、例のようにしてヘッダやボディ部分を指定できます。

オプション

use するときにいくつかのオプションを指定できます:

use HTTP::Response::Maker 'HTTPResponse', (
    default_headers => [ 'Content-Type' => 'text/plain' ],
    prefix => 'PLAIN_', # PLAIN_*** という名前で関数が定義される
);

say PLAIN_OK('hello')->as_string;
# 200 OK
# Content-Type: text/plain
# 
# hello

対応しているレスポンスオブジェクト

ArrayRef を生成する ::PSGI 以外にも、以下のクラスに対応しています。


以上です。どうぞご利用ください。

https://github.com/motemen/HTTP-Response-Maker