このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
apricot:usage:ja:middleware [2020/07/29 13:28] tanaka 作成 |
apricot:usage:ja:middleware [2020/08/05 09:46] tanaka [Middleware インターフェース] |
||
---|---|---|---|
行 6: | 行 6: | ||
--- // | --- // | ||
- | [[apricot: | + | [[apricot: |
目次 | 目次 | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
行 16: | 行 18: | ||
* Apricot ミドルウェア | * Apricot ミドルウェア | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
行 22: | 行 23: | ||
===== ミドルウェアの構成 ===== | ===== ミドルウェアの構成 ===== | ||
- | >TODO | + | |
+ | 本章ではミドルウェア基盤を作ります。ミドルウェアとはアクションを囲んでいる層のような存在で、ユーザからのリクエストは何層もあるミドルウェアを通って最終的にアクションにたどり着きそこでレスポンスが生成されますが、途中でリクエストが中断され、ミドルウェアがレスポンスを生成することもあります。これを図示すると以下のようになります。 | ||
+ | |||
+ | === ミドルウェア構造 === | ||
+ | {{: | ||
+ | |||
+ | 上図のような処理のネスト構造を '' | ||
+ | |||
+ | Apricotには以下のミドルウェアが実装されています。 | ||
+ | |||
+ | * アクセスログ | ||
+ | * CSRF対策 | ||
+ | * ユーザ認証 | ||
+ | |||
+ | ミドルウェアパイプラインを含めたミドルウェアの仕組みはApricotのコアの機能として実装しますが、上記のような具体的なミドルウェアの実装はアプリ側で行います。 | ||
+ | |||
+ | ==== Middleware インターフェース ==== | ||
+ | |||
+ | 冒頭のミドルウェア構造の図から分かるように、ミドルウェアの役割は自分を処理の後に次のプロセッサーに制御を渡すことです。この時、プロセッサーにはミドルウェアとアクションの両方があるので、前出のInvoker インターフェースを使います。ミドルウェアは任意タイミングで Invokerを 使うことができるので、前処理、後処理またはその両方ができます。また、クライアントの要求を自分だけで消費して Invoker を使うことなく自分のレスポンスを返すことも可能です。 | ||
+ | |||
+ | {{fa> | ||
+ | <code php Middleware.php> | ||
+ | <?php | ||
+ | namespace Apricot\Foundation\Middleware; | ||
+ | |||
+ | use Apricot\Foundation\Invoker; | ||
+ | use Apricot\Foundation\Response; | ||
+ | |||
+ | /** | ||
+ | * Middleware Interface | ||
+ | */ | ||
+ | interface Middleware | ||
+ | { | ||
+ | /** | ||
+ | * Processes an incoming request and produces a response. | ||
+ | * | ||
+ | * @param Invoker $next Next invoker. | ||
+ | * @return \Apricot\Foundation\Response if return a response within this method, then don't call the next action. | ||
+ | */ | ||
+ | public function process(Invoker $next) : | ||
+ | } | ||
+ | </code> | ||
\\ | \\ |