5. Web Client
Clinet Side
Server Side
Dispatcher & Router
OPTION
ページは自身を構
成し、それが表現
Resource Client になりクライアン
トに返ります。
サーバー内クライアント
RES
Resource A
Page Resource RES Resource B RES
RES
Representation (View)
RES
Resource C RES
リソース内に
ビューを持ち、リ
ソースは状態から
表現に変わりま
PUSH
6. Web CLI API Service Clinet Side
Socket HTTP Another App
GET PUT POST DELETE HEAD OPTIONS
HTTP Verb Server Side
Dispatcher & Router リソースは自身を
OPTION 構成するために必
要あれば他のリ
App Resource
ソースをリクエス
トします。
Resource Client GET app://self/user/friend?user_id=1
サーバー内クライアント
GET page://self/user?id=1 App Resource
GET PUT POST DELETE
GET app://self/user/profile?user_id=1
GET app://self/user?id=1
リソースはHTTP
動詞とURIで繋が
RES App Resource
れています
Page Resource RES
Representation (View) RES GET
POST
PUT HTTP Resource X Resource
FIle Resource
OPTION Another App A Resource
Another App B Resource
PUSH
8. Web Client
Clinet Side
Server Side
Dispatcher & Router
OPTION Resource A
Resource B RES
RES
Resource C RES
RES
View
RES
RES
HTML PHP Doc DB
Viewにはリソース
のプレースフォル
ダだけがありま
す。
それをトリガーに
リソースがPULLリ
クエストされま
す。 CMSやRIA、JS
MVC等と親和性が
高いのではないで
しょうか。
PULL
10. Resource Client
GET app://self/user?id=1
USER “User” Resource
User Page
GET app://self/friend?user_id=1
FRIEND “Friend” Resource
このユーザーペー リソースは単数また
ジは2つのアプリ は複数のリソースで
ケーションリソー 構成されますが、ク
スで構成されてい ライアントには構成
ます。 がわかりません リソースの関係はリ
Resource Client クエストで表す事が
それぞれのリクエ
???? できます。
ストは自身のス
ロットに格納され
ました。
USER FRIEND
11. Resource Client
GET app://self/user?id=1
User Page User Resource
USER
[‘name’=>‘koriym’, ‘status’=>’OK’]
ユーザーページはリ
ソースクライアントか ユーザーリソースは状
らみたらサービスです Representation State
態を持ち、その状態を
が、ユーザーリソース リソース表現状態の移動
表現にしてリクエスト
に対してはクライアン もとに移動(返)され Transfer
トです これが
ます。
ユーザーページが
ユーザーリソースを REpresentation State Transfer
利用する関係は 固定 RESTです。
されリクエストに関
わらず不変です。
12. USER1 GET app://self/user?id=1
User Page or
USER2 [‘name’=>‘koriym’, ‘status’=>’OK’]
observe
外部へのリクエストは
自身のスロットに格納
します。方法は2つあ リクエスト、あるいは リクエストハンドラー
ります。 リクエスト結果です。 は、ページが仕事を終
える(自身を構成す
る)のを持ってます。
Req Handler
次は彼の出番だからで
す。
13. CQRS
NEWS GET app://self/news/top 実行
LOGIN GET app://self/login/current/user ACL適用しなくては
AD GET app://self/ad/weekly/rotation これはキャッシュあるはず
Top Page
POST app://self/footprint/counter?inc=1 これはページ表示後でいいや
PUT app://self/log/user/ua これはキューにいれる
POST app://self/ntry/new GET用のビューを今すぐつくる
ページは自身を構成 リクエストハンドラー
することだけに専念 はURIやコンテキスト
します。 でそのリクエストをど
ういう風に実行するか
を判断しながらページ
まず、ページは他のリ Req Handler をインスタンス(実
ソースリクエストを
体)にします。
持った構造=リソース with
グラフです。 Injectable URI Router
Test ? Stage ?
22. Object
DI dependency A
Value
dependency B
$injector->getInstance(‘nametoservice’);
A
Injector B
module
インジェクターはオブ
ジェクトを取得すると
Service
きに、そのオブジェク
トが必要(依存)なイ
ンスタンスがインジェ
クト(注入)します。
23. Object
DI dependency A
Value
dependency B
$injector->getInstance(‘nametoservice’);
A
Injector A dependency A B
module
インジェクターに
セットされた「モ
B Service
dependency B
ジュール」は、注入の
ルールを知っていま 最も単純で、最も使われ
す。 るルールは特定のイン
ターフェイスが指定され
たら、特定のクラスで生
成したインスタンスを注
入するというものですと
いうものです。
48. メソッドインターセ
プターはメソッドを
のっとり(インター
セプトして)他の付随
的な処理(ログやト ログやトランザクショ
ランザクション)と合 ンなどクロスカッティ
わせて行います。 ングコンサーン(横断
Timer Start 的関心事)とコアコン
サーン(本質的関心
事)を分離します。
Validation
Transaction begin
Business Logic A Business Logic B Business Logic C
Commit ? Rollback ?
Log
Post Filter
Timer Stop
49. @Aspect
アスペクト指向を適用
するクラスに
/** @Aspectとマークし
ます
*
* @Aspect
*/
class Aop extends AbstractObject
{
/**
* @Log @Logはメソッドイン
*/ ターセプターを指定し
public function onGet($lang) ています。
{
...
53. HATEOAS
• =Hypermedia as the Engine of
状態遷移
Application State (状態マシンを
ハイパーメディアで表現する)
• 状態遷移がハイパーリンクで得られる
http://www.infoq.com/jp/articles/webber-rest-workflow