BEAR.Sundayとは

BEAR.SundayとはPHPのWebアプリケーションフレームワークです。 BEAR.Sundayの目標は、標準に準拠し高品質でAPI中心のRESTfulアプリケーションのフレームワークを提供することです。

フレームワーク

BEAR.Sundayは3つのオブジェクトフレームワークで構成されています。

Ray.Di依存関係逆転の原則に基づいてオブジェクトをインターフェイスで結びます。

Ray.Aopアスペクト指向プログラミングで本質的関心と横断的関心を結びます。

BEAR.Resourceはアプリケーションの情報や機能をリソースにしてREST制約で結びます。

アプリケーションもWebと同じように統一されたメソッドとURIでリソースを操作します。強力なDIとAOPでREST API中心に構築されたクリーンなアプリケーションは変更に強く拡張性に優れます。

ライブラリ

BEAR.Sundayアプリケーションフレームワークは一般的なMVCフレームワークと違って認証やデータベースなどの特定の仕事のための独自のライブラリを持ちません。 高品質なAuraフレームワークのライブラリや、Packagistで利用可能なサードパーティのライブラリを使用します。

リソース指向パターン

BEAR.SundayはMVCパターンではなく、RESTfulアプリケーション用のResource-Method-Representationパターンのバリエーションです。

4R

ステートレスなリクエストはMethodResource状態をつくり、内部のRendererがRepresentationにしてレスポンスになります。

class Index extends ResourceObject
{
    public $code = 200;
    public $headers = ['access-control-allow-origin' => '*'];
    public $body = [];

    private $renderer;

    public function __construct(RenderInterface $render)
    {
        $this->renderer = $render;
    }

    public function onGet(string $name) : ResourceObject
    {
        // set resource state
        $this->body = $state;

        return $this;
    }

    public function __toString()
    {
        // contextual renderer makes representation (JSON, HTML)
        return $this->renderer->render($this);
    }

    public function transfer(TransferInterface $responder, array $server)
    {
        // contextual responder output (CLI, HTTP)
        $responder($this, $server);
    }
}

Resource

WebのリソースをオブジェクトにしたものがResourceObjectです。(Object as a Service) 固有のURIがマップされHTTPに準じたリクエストメソッドでリソースの状態を変更します。 他のリソースを@Embedで埋め込んだり、次のアクションに@Linkすることでハイパーメディアにすることもできます。

Method

Webからのリクエストはユニークにルートされます。HTTPメソッドに応じたパラメーターで呼ばれ、Method内で自身のリソースプロパティを構成します。 MVCのコントローラーのようにドメインモデルや他のリソースにアクセスする事もあります。

Methodの構造はオニオンアーキテクチャクリーンアーキテクチャのバリエーションの1つです。 認証やバリデーション、ログなどのユースケースはアスペクト指向プログラミングでMethodに任意の層でラップされます。

Representation

個別に注入されたRendererは文字列評価時にリソースの状態をRepresentationにします。MethodではRepresentationに関心を持ちません。Representationになったリソースはリソース内のResponderでクライアントに出力されます。

Clean Method

コラボレーション

  1. ウェブハンドラーはクライアントリクエストをアプリケーションのリソースリクエストに変更します。

  2. リクエストを受けたResource内のMethodは自身を構成します。

  3. 文字列評価でResource内のレンダラーがリソース状態をRepresentationにします。

  4. レスポンダーがRepresentationをクライアントにレスポンスとして返します。

なぜ新しいパターン?

従来のパターンはオブジェクト指向パラダイムのアプリケーションをHTTPにマップしたものです。 純粋なコントローラーはHTTPやRESTに対して無知です。

新パターンではHTTPにマップするオブジェクトを作成します。RESTをフレームワークとして、適合するコンポーネントを作成します。

RESTの力を引き出し、HTTPをアプリケーションプロトコルとして扱うリソース指向のためのパターンです。