読者です 読者をやめる 読者になる 読者になる

かまずにまるのみ。

文鳥とかビールとか

はじめてのBEAR.Skeleton (2)

前回までの内容

 

ここから二回目

f:id:tdakak:20130522113811p:plain:w400

アプリケーションリソース

ページリソースができたので試しにアプリケーションリソースも作ってみる。

アプリケーションリソース?

ページリソースは 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 メソッド)のみ実装。
最初は小さく。


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 を理解するためにはリソースについての理解が不可欠です。

まずは Web におけるリソースの例を見てみましょう。
・東京の天気予報
技術評論社の『Web を支える技術』のページ
新花巻駅の写真

・リソースとは、Web 上の情報である
・世界中の無数のリソースは、それぞれ URI で一意の名前を持つ
URI を用いることで、プログラムはリソースが表現する情報にアクセスできる
Web を支える技術 - 3.3 リソース

http://gihyo.jp/magazine/wdpress/plus/978-4-7741-4204-3


BEAR では「RESTful」というのもひとつのキーワードになっている。
BEAR はこの概念を軸としたフレームワーク…という理解でいいんだろうか。

たとえばとりーたに関する情報もひとつの「リソース」となる。

f:id:tdakak:20130522114024p:plain


特定の URI へ Web アクセスしたときに得られる情報もリソース(BEAR でいうとページリソース)だし、BEAR 内で app://self/tori でとりに関する情報が得られるとしたらそれもリソース(アプリケーションリソース)。

BEAR ではアプリケーションリソースへのアクセスは API 経由とし、内部的に利用する仕組みになっている。


f:id:tdakak:20130522121818p:plain

 

ページリソースからアプリケーションリソースを取得する

ページリソースからアプリケーションリソースを取得し、その内容を表示してみる。
ページリソースから以下のようにアプリケーションリソースの 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}


ブラウザからアクセスするとアプリケーションリソースで設定した値が表示されている。

http://localhost:8088/

f:id:tdakak:20130522125121p:plain

虫眼鏡っぽいアイコンをクリックするとリソースの状態が確認できる。

f:id:tdakak:20130522125956p:plain

 

ドキュメント

リソースについては はじめてのリソース に書いてある。

また、以下の書籍を参照しました。
技術評論社さんいつもお世話になっています。
著者の方々ありがとうございます。


次回へつづく(たぶん)

# 間違いやお気づきの点などありましたら、ツッコミいただけると嬉しいです。