抱負なうシステム紹介

最終更新日 : 2011-01-04 01:27:07

あけましておめでとうございます。
抱負なう というサービスを2011年新年早々作ってみました。ソースはgithubで公開しています。

抱負なうとは


抱負というポジティブな情報を公開シェアすることにより、日本をもりあげあげていければなぁというサービスです。


システムについて


フレームワーク等は利用せず、CPANモジュールを組み合わせてスクラッチから作ってみました。

システムポイント紹介


せっかくですので、実装のちょっとしたポイントを一つ紹介します。

コントローラとAPIの分離


コントローラではWebに関することのみの処理を行い、それ以外の処理はすべてAPIモジュールに投げる仕組みを導入しています。

利用例) ソース このページ例
sub houfu {
    my ( $self, $c ,$args ) = @_;
    $c->template('user/houfu.tx');
    my $api_res = $c->api('User')->lookup_houfu( $args );
    if($api_res->has_error){
        return $c->handle_not_found();
    }
    else {
        $c->append_stash( $api_res->stash );
    }
}

上記はコントローラの関数なのですが、処理自体は User APIになげて処理を行い、取得した API Responseオブジェクトの状態をみてブラウザへの表示を切り替えています。

APIソース
sub profiles {
    +{
        lookup => {
            required => [qw/screen_name/],
        },
        lookup_houfu => {
            required => [qw/houfu_code screen_name/],
        }
    }
}

profilesで検証ルールを記載しています。

sub lookup_houfu {
    my $self = shift;
    my $args = shift;
    my $v_res = $self->validate( $args );
    my $stash = {};
    if(!$v_res->has_error){
        my $v = $v_res->valid;
        my $user_hash = $self->db->lookup_member( $v->{screen_name} )
            or return $self->create_error_set($v_res,'user_not_found');
        my $houfu_hash = $self->db->lookup_houfu( $v->{screen_name},$v->{houfu_code})
            or return $self->create_error_set($v_res,'houfu_not_found');
        $stash->{user_hash} = $user_hash;
        $stash->{houfu_hash} = $houfu_hash;
    }

     return $self->create_result_set( { v_res => $v_res , stash => $stash } );
}

うけとったデータを検証し、それに基づいてDBにアクセスしデータを取得し、API Resultオブジェクトを返しています。

この実装の利点は、複数のクライアント(PC/スマートフォン/モバイル/テストスクリプト等)対応により柔軟に対応できるということです。特に重要な点は、APIはWebの依存から切り離されており、どこからでも簡単に利用できるということです。

今後はこのAPI部分の実装を標準化し、たとえばtwitter OAuthの認証部分とかを複数のサービスで使い回せるようなミドルウェアー的なのを用意していければ良いなぁと思います。

まとめ


抱負を実現できる年にしたいですね

あわせて読みたい


  • カテゴリ:
  • Tech
  • タグ: