抱負なうシステム紹介
最終更新日 : 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の認証部分とかを複数のサービスで使い回せるようなミドルウェアー的なのを用意していければ良いなぁと思います。