このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
apricot:usage:ja:middleware [2020/08/03 11:52] tanaka [ミドルウェアの構成] |
apricot:usage:ja:middleware [2020/08/04 15:48] y2sunlight [Apricot ミドルウェア] |
||
---|---|---|---|
行 10: | 行 10: | ||
目次 | 目次 | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
行 16: | 行 18: | ||
* Apricot ミドルウェア | * Apricot ミドルウェア | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
行 25: | 行 26: | ||
本章ではミドルウェア基盤を作ります。ミドルウェアとはアクションを囲んでいる層のような存在で、ユーザからのリクエストは何層もあるミドルウェアを通って最終的にアクションにたどり着きそこでレスポンスが生成されますが、途中でリクエストが中断され、ミドルウェアがレスポンスを生成することもあります。これを図示すると以下のようになります。 | 本章ではミドルウェア基盤を作ります。ミドルウェアとはアクションを囲んでいる層のような存在で、ユーザからのリクエストは何層もあるミドルウェアを通って最終的にアクションにたどり着きそこでレスポンスが生成されますが、途中でリクエストが中断され、ミドルウェアがレスポンスを生成することもあります。これを図示すると以下のようになります。 | ||
- | ==== ミドルウェア構造 | + | === ミドルウェア構造 === |
- | {{:apricot:ext: | + | {{:apricot:usage: |
上図のような処理のネスト構造を '' | 上図のような処理のネスト構造を '' | ||
行 32: | 行 33: | ||
Apricotには以下のミドルウェアが実装されています。 | Apricotには以下のミドルウェアが実装されています。 | ||
- | * [[apricot: | + | * アクセスログ |
- | * [[apricot: | + | * CSRF対策 |
- | * [[apricot: | + | * ユーザ認証 |
ミドルウェアパイプラインを含めたミドルウェアの仕組みはApricotのコアの機能として実装しますが、上記のような具体的なミドルウェアの実装はアプリ側で行います。 | ミドルウェアパイプラインを含めたミドルウェアの仕組みはApricotのコアの機能として実装しますが、上記のような具体的なミドルウェアの実装はアプリ側で行います。 | ||
行 40: | 行 41: | ||
==== Middleware インターフェース ==== | ==== Middleware インターフェース ==== | ||
- | 冒頭の[[#ミドルウェア構造|ミドルウェア構造]]の図から分かるように、ミドルウェアの役割は自分を処理の後に次のプロセッサーに制御を渡すことです。この時、プロセッサーにはミドルウェアとアクションの両方があるので、前出の | + | 冒頭のミドルウェア構造の図から分かるように、ミドルウェアの役割は自分を処理の後に次のプロセッサーに制御を渡すことです。この時、プロセッサーにはミドルウェアとアクションの両方があるので、前出のInvoker インターフェースを使います。ミドルウェアは任意タイミングで Invokerを 使うことができるので、前処理、後処理またはその両方ができます。また、クライアントの要求を自分だけで消費して Invoker を使うことなく自分のレスポンスを返すことも可能です。 |
{{fa> | {{fa> |