抱負なうシステム紹介
最終更新日 : 2011-01-04 01:27:07
あけましておめでとうございます。
抱負なう というサービスを2011年新年早々作ってみました。ソースはgithubで公開しています。
フレームワーク等は利用せず、CPANモジュールを組み合わせてスクラッチから作ってみました。
せっかくですので、実装のちょっとしたポイントを一つ紹介します。
コントローラではWebに関することのみの処理を行い、それ以外の処理はすべてAPIモジュールに投げる仕組みを導入しています。
利用例) ソース このページ例
上記はコントローラの関数なのですが、処理自体は User APIになげて処理を行い、取得した API Responseオブジェクトの状態をみてブラウザへの表示を切り替えています。
APIソース
profilesで検証ルールを記載しています。
うけとったデータを検証し、それに基づいてDBにアクセスしデータを取得し、API Resultオブジェクトを返しています。
この実装の利点は、複数のクライアント(PC/スマートフォン/モバイル/テストスクリプト等)対応により柔軟に対応できるということです。特に重要な点は、APIはWebの依存から切り離されており、どこからでも簡単に利用できるということです。
今後はこのAPI部分の実装を標準化し、たとえばtwitter OAuthの認証部分とかを複数のサービスで使い回せるようなミドルウェアー的なのを用意していければ良いなぁと思います。
抱負なう というサービスを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の認証部分とかを複数のサービスで使い回せるようなミドルウェアー的なのを用意していければ良いなぁと思います。
