BEARで始めるWebアプリケーション開発 その2「リソースの作り方を学んでみる」

今まで月1ペースぐらいだったブログ更新が急にペースアップしているのは、自分のwktk感の現れです。(笑) 最初の紹介記事はてブの付き方を見ると、結構注目度も高い感じですね。今まで注目されてなかったのが何とも不思議だ…。

さて、今回から実践編という事で、BEARを使って実際にWebアプリケーションを作っていこうと思います。

お題としては、拙作のWebサービス達の中から、逆さ語をチョイスする事にしました。

逆さ語は、"与えられた文章を逆さ語に変換する"という機能がメインで、画像を扱う訳でもないし、画面遷移もなく1画面で完結するUIなので、最初のお題としてはもってこいかなと。

BEARでのリソース作成を試してみる

という訳でリソースを作っていくんですが、リソース設計をする前に、まずはBEARでどうやってリソースを作るのか勉強しておこうと思います。

BEARでのリソース作成に関しては、本家Wikiリソースの項目を見てもよく分からなくて(^^;、BEARの作者さんから「DEMOページのサンプルが参考になる」との情報を頂いたので(ありがとうございました!)、そちらを参考にさせて頂きました。

まずは難しい事は抜きにして、GETしたら値を返すだけのリソースを作ってみる事に。とりあえず、"/home/bear/helloworld/App/Ro/Sample.php"というファイルを作って以下のように書いてみました。

<?php
class App_Ro_Sample extends BEAR_Ro
{
    public function onRead($values)
    {
        $result = array(
                        array('id' => 1, 'name' => 'tom'),
                        array('id' => 2, 'name' => 'stellaqua'),
                       );
        return $result;
    }
}
?>

BEARにはCLI用のコマンドがあって、それを使ってCLI上でリソースにアクセスできるので、作成したリソースが使えるかどうか試してみます。

$ bear read Sample
code
200
header
Array
(
    [request] => Array
        (
            [uri] => Sample
        )

)
body
array (
  0 =>
  array (
    'id' => 1,
    'name' => 'tom',
  ),
  1 =>
  array (
    'id' => 2,
    'name' => 'stellaqua',
  ),
)

おぉ、これはスゴイ! これの何がスゴイのかは、次のようなコマンドを叩いてみると分かります。

$ bear read http://rss.asahi.com/f/asahi_newsheadlines
code
200
header
Array
(
    [title] => asahi.com
    [link] => http://www.asahi.com/
    [description] => アサヒ・コム
    [dc:language] => ja
    [dc:rights] => Copyright 2009 Asahi Shimbun. All rights reserved. No reproduction or republication without written permission.
    [dc:date] => 2010-01-21T19:31:30+09:00
    [dc:publisher] => 朝日新聞社
    [dc:creator] => 朝日新聞社
    [items] =>

    [type] => rss
    [request] => Array
        (
            [uri] => http://rss.asahi.com/f/asahi_newsheadlines
        )

)
body
array (
  0 =>
  array (
    'title' => '「こだま」でも頑張って 500系バウムクーヘン',
    'link' => 'http://rss.asahi.com/click.phdo?i=f152dafd46bc1b9c0faf4105e0f88e65',
    'description' => ' <br clear="both" style="clear: both;"/>
<img alt="" style="border: 0;" border="0" src="http://rss.asahi.com/img.phdo?i=f152dafd46bc1b9c0faf4105e0f88e65"/>
',
    'dc:subject' => '社会',
    'dc:date' => '2010-01-21T19:09:57+09:00',
  ),
  1 =>
 : (略)

このように、リソースが外部にあるか内部にあるかを気にする事なく、かつ、全く同じインターフェイスでアクセスする事ができてしまいます。

この"全く同じインターフェイスで"というのがキモで、裏で動いているのがDBなのか、単なるテキストファイルなのか、はたまた外部にHTTPでアクセスしてるのか、あるいは複雑なロジックの結果なのか…なんていう事情を一切気にしなくても、利用者の立場から見れば、同じ"リソース"というモノとしてアクセスする事ができます。

この事がWebアプリケーション開発にどんな風に効いてくるのかというのは、実際に作っていく過程で見えてくるのではないかなと思っています。

次回は?

という事で、次回は実際にリソースの設計をして、それをBEAR上で実装するところまでやってみる予定です。