ctyo cycle tech log

cycling, map and gis technology, and myself.

PerlBeginners#2に行ってWAFをススメられてきた!

PerlBeginners#2に行ってきました!

f:id:ctyo:20120427205725j:image

今回は「Web関係の質問をしていい」とのことで, CGI を書くとき動的なページにする機能をつけるとプログラムが汚くなるので, 綺麗に書くにはどうしたらいいのかを聞いてきました.


結果, 回答では皆さんPSGI(Plack)上のWAFを使っているとのこと. WAFについてくるDispacher(別名 Mapping, Rooting)機能を使うとスッキリするヨ, との回答をいただきました!


WAF使ったことあったけど, CGI ばっかりやってた, 確かに!

とりあえず, 質問の中で使っていたサンプルを Mojolicious::Lite を使ってPSGIアプリにしてみました!

# URLが生きているかどうかを確かめてJSONを返すプログラム
# 起動は plackup check_domain.pl
use Mojolicious::Lite;

get '/' => sub {
    my $self = shift;
    my $url  = $self->param('url'); 

    my $res;
    if($url eq ""){
        $res = {avail => '0', url => $url};
    }else{
        my $res_code = check_domain($url);
        if ($res_code =~ /^[2|3][0-9]{2}/) {
            $res = {avail => '1', url => $url, code => $res_code};
	}else{
	    $res = {avail => '0', url => $url, code => $res_code};
        }
    }

    $self->render_json($res);
};

sub check_domain {
    use LWP::UserAgent;
    use HTTP::Request;
    use HTTP::Response;

    my $url = shift;

    my $proxy = new LWP::UserAgent;
    my $req = HTTP::Request->new('GET' => $url);
    my $res = $proxy->request($req);

    return $res->code;
}

app->start;


どんどん機能を追加していくときに書きやすくなるんじゃないかな, と思った.
感想. 今度からは素直にWAF使おう!

thankyou
PerlBeginners#2
@ytnobody さん
- http://d.hatena.ne.jp/perlcodesample/