はじめてのBEAR.Skeleton (2)
前回までの内容
- はじめてのBEAR.Skeleton (1) - かまずにまるのみ。
- BEAR.Skeleton でアプリをつくる準備
- ページリソースの作成
- ねこととり、@koriym さん(および @futurista999 さんのツッコミ)により命名
- ねこ「ネコ子」
- とり「トリー太」
ここから二回目
アプリケーションリソース
ページリソースができたので試しにアプリケーションリソースも作ってみる。
アプリケーションリソース?
ページリソースは Web ページと結びついているもの、アプリケーションリソースは Web ページと切り離されたシステム内部の機能と結びつくものと BEAR では定義されている(WEB+DB Press vol.73 「巨人の肩から PHP - BEAR.Sunday で RESTful なシステム開発」参照)
MVC だとモデルに相当。
アプリケーションリソースを作成してみる
リソースオブジェクトクラスには URI とリクエストインタフェースが必要。
apps\Memo\Resource\App\ 以下に Tori.php というファイルを追加し、以下のような内容にする。
URI は /tori とする。Memo\Resource\App\ 直下になるので名前空間は "Memo\Resource\App" で定義する。
リクエストインタフェースについては GET (onGet メソッド)のみ実装。
最初は小さく。
- 名前空間を定義
- namespace Memo\Resource\App;
- PHP: 名前空間の定義 - Manual
- 名前空間のエイリアス作成
- use BEAR\Resource\AbstractObject;
- PHP: 名前空間の使用法: エイリアス/インポート - Manual
- Tori クラスの作成
- BEAR\Resource\AbstractObject を継承
- GET リクエストに対応するため onGet メソッドを定義
apps\Memo\Resource\App\Tori.php
<?php namespace Memo\Resource\App; use BEAR\Resource\AbstractObject; /** * Tori Resource */ class Tori extends AbstractObject { /** * Get */ public function onGet() { $this['name'] = 'torita'; return $this; } }
コマンドラインでアクセスしてみる。
name torita を含むレスポンスが返ってくるはず。
なんかそれっぽい。
$ php api.php get app://self/tori 200 OK date: ["Wed, 22 May 2013 01:49:48 GMT"] [BODY] name torita [VIEW] { "name": "torita", "_links": { "self": { "href": "app://self/tori" } } }
リソース??
繰り返しになるけど BEAR は「リソース指向」のフレームワーク。
そもそもここでいう「リソース」って何を指すのだろうか。
BEAR.Sunday のドキュメントには以下のように書かれている。
リソースとは情報のかたまりです。
https://code.google.com/p/bearsunday/wiki/my_first_resource#リソース設計
以下は技術評論社より出版されている Web を支える技術 から、リソースに関する記述を一部を抜粋したもの。
REST における重要な概念の一つにリソース(Resource)があります。REST を理解するためにはリソースについての理解が不可欠です。
http://gihyo.jp/magazine/wdpress/plus/978-4-7741-4204-3
…
まずは Web におけるリソースの例を見てみましょう。
・東京の天気予報
・技術評論社の『Web を支える技術』のページ
・新花巻駅の写真
…
・リソースとは、Web 上の情報である
・世界中の無数のリソースは、それぞれ URI で一意の名前を持つ
・URI を用いることで、プログラムはリソースが表現する情報にアクセスできる
Web を支える技術 - 3.3 リソース
BEAR では「RESTful」というのもひとつのキーワードになっている。
BEAR はこの概念を軸としたフレームワーク…という理解でいいんだろうか。
たとえばとりーたに関する情報もひとつの「リソース」となる。
特定の URI へ Web アクセスしたときに得られる情報もリソース(BEAR でいうとページリソース)だし、BEAR 内で app://self/tori でとりに関する情報が得られるとしたらそれもリソース(アプリケーションリソース)。
BEAR ではアプリケーションリソースへのアクセスは API 経由とし、内部的に利用する仕組みになっている。
ページリソースからアプリケーションリソースを取得する
ページリソースからアプリケーションリソースを取得し、その内容を表示してみる。
ページリソースから以下のようにアプリケーションリソースの URI を指定してリクエストを発行。今回はとりあえず、アプリケーションリソースへのリクエスト結果はそのまま $this に突っ込んだ。
apps\Memo\Resource\Page\Index.php
<?php namespace Memo\Resource\Page; use BEAR\Resource\AbstractObject as Page; use BEAR\Sunday\Inject\ResourceInject; /** * Index page */ class Index extends Page { use ResourceInject; public function onGet($name = 'BEAR.Sunday') { $this['greeting'] = 'Hello ' . $name; $this['tori'] = $this->resource->get->uri('app://self/tori')->request(); return $this; } }
先ほど作成した Tori リソースは name を含んでいるはず。
apps\Memo\Resource\Page\Index.tpl
{extends file="layout/default.tpl"} {block name=title}Index{/block} {block name=page} <h1>{$greeting}</h1> <div>{$tori.name}</div> {/block}
ブラウザからアクセスするとアプリケーションリソースで設定した値が表示されている。
虫眼鏡っぽいアイコンをクリックするとリソースの状態が確認できる。