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パターンのバリエーションです。
ステートレスなリクエストはMethod
でResource
状態をつくり、内部の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
でクライアントに出力されます。
コラボレーション
-
ウェブハンドラーはクライアントリクエストをアプリケーションのリソースリクエストに変更します。
-
リクエストを受けた
Resource
内のMethod
は自身を構成します。 -
文字列評価で
Resource
内のレンダラーがリソース状態をRepresentation
にします。 -
レスポンダーが
Representation
をクライアントにレスポンスとして返します。
なぜ新しいパターン?
従来のパターンはオブジェクト指向パラダイムのアプリケーションをHTTPにマップしたものです。 純粋なコントローラーはHTTPやRESTに対して無知です。
新パターンではHTTPにマップするオブジェクトを作成します。RESTをフレームワークとして、適合するコンポーネントを作成します。
RESTの力を引き出し、HTTPをアプリケーションプロトコルとして扱うリソース指向のためのパターンです。