====== PSR-15: HTTP Server Request Handlers ======
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-06-23//
本章は、若干の補足を加筆してはいるものの単に[[https://www.php-fig.org/psr/|PSRのサイト]]を日本語に翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。
関連記事
* [[psr:top|PSR - PHP標準勧告]]
* [[psr:psr1|PSR-1: Basic Coding Standard - 基本コーディング規約]]
* [[psr:psr3|PSR-3: Logger Interface - ロガーインターフェイス]]
* [[psr:psr4|PSR-4: Autoloading Standard - オートローディング規約]]
* [[psr:psr5|PSR-5: PHPDoc Standard(Draft) - PHPDoc規約]]
* [[psr:psr6|PSR-6: Caching Interface - キャッシングインターフェイス]]
* [[psr:psr7|PSR-7: HTTP Message Interface - HTTPメッセージインターフェイス]]
* [[psr:psr11|PSR-11: Container Interface - コンテナインターフェイス]]
* [[psr:psr12|PSR-12: Extended Coding Style - 拡張コーディングスタイル]]
* [[psr:psr13|PSR-13: Link definition interfaces - リンク定義インターフェース]]
* [[psr:psr14|PSR-14: Event Dispatcher - イベントディスパッチャー]]
* PSR-15: HTTP Server Request Handlers - HTTPサーバーリクエストハンドラー
* [[psr:psr16|PSR-16: Common Interface for Caching Libraries - キャッシングライブラリのための共通インターフェース]]
* [[psr:psr17|PSR-17: HTTP Factories - HTTPファクトリー]]
* [[psr:psr18|PSR-18: HTTP Client - HTTPクライアント]]
* [[psr:psr19|PSR-19: PHPDoc tags(Draft) - PHPDocタグ]]
-----
====== PSR-15: HTTPサーバーリクエストハンドラー ======
--- // 原文より翻訳 [[https://www.php-fig.org/psr/psr-15/|PSR-15: HTTP Server Request Handlers]] 2020-07-28 現在 //
このドキュメントでは、[[https://www.php-fig.org/psr/psr-7/|PSR-7]]またはその後の代替PSRで説明されているHTTPメッセージを使用するHTTPサーバーリクエストハンドラー(「リクエストハンドラー」)とHTTPサーバーミドルウェアコンポーネント(「ミドルウェア」)の一般的なインターフェースについて説明します。
HTTPリクエストハンドラーは、あらゆるWebアプリケーションの基本的な部分です。サーバー側コードは、リクエストメッセージを受信して処理し、応答メッセージを生成します。HTTPミドルウェアは、一般的なリクエストとレスポンスの処理をアプリケーション層から分離するための方法の1つです。
このドキュメントで説明するインターフェースは、リクエストハンドラーとミドルウェアを抽象化したものです。
注:「リクエストハンドラー」および「ミドルウェア」へのすべての参照は、サーバーリクエスト処理に固有なものです。
このドキュメントのキーワード ''MUST'' , ''MUST NOT'' , ''REQUIRED'' , ''SHALL'' , ''SHALL NOT'' , ''SHOULD'' , ''SHOULD NOT'' , ''RECOMMENDED'' , ''MAY'' 及び ''OPTIONAL'' は、 [[https://www.ietf.org/rfc/rfc2119.txt|RFC 2119]]で説明されているように解釈して下さい。
> **RFC 2119の説明**
> ''MUST'', ''REQUIRED'', ''SHALL'' --- 絶対必要
> ''MUST NOT'', ''SHALL NOT'' --- 絶対禁止
> ''SHOULD'', ''RECOMMENDED'' --- 推奨(但し、無視できる特定の正当な理由が存在するかもしれない)
> ''SHOULD NOT'' --- 推奨できない(但し、許可できる特定の正当な理由が存在するかもしれない)
> ''MAY'', ''OPTIONAL'' --- オプション
=== References ===
* [[https://www.php-fig.org/psr/psr-7/|PSR-7]] ・・・ HTTP message interfaces
* [[https://tools.ietf.org/html/rfc2119|RFC 2119]] ・・・ Key words for use in RFCs to Indicate Requirement Levels
\\
===== 1. 仕様 ======
==== 1.1 リクエストハンドラー ====
リクエストハンドラーは、PSR-7で定義されているように、リクエストを処理して応答を生成する個別のコンポーネントです。
リクエスト条件によりリクエストハンドラーがレスポンスを生成できない場合、リクエストハンドラーは例外をスローする場合があります( ''MAY'' )。例外のタイプは定義されていません。
この規約を使用するリクエストハンドラーは、次のインターフェースを実装する必要があります( ''MUST'' ):
* ''Psr\Http\Server\RequestHandlerInterface''
\\
==== 1.2 ミドルウェア ====
ミドルウェアコンポーネントは個別のコンポーネントですが、PSR-7で定義されているように、着信要求の処理と結果応答の作成に他のミドルウェアコンポーネントと一緒に参加することが多いです。
ミドルウェアコンポーネントは、十分な条件が満たされている場合、リクエストハンドラーに委任することなく応答を作成して返すことができます( ''MAY'' )。
この規約を使用するミドルウェアは、次のインターフェースを実装する必要があります( ''MUST'' ):
* ''Psr\Http\Server\MiddlewareInterface''
\\
==== 1.3 レスポンスの生成 ====
応答を生成するミドルウェアまたはリクエストハンドラーは、PSR-7の ''ResponseInterface'' プロトタイプ または ''ResponseInterface'' インスタンスを生成できるファクトリーを構成することをお勧めします( ''RECOMMENDED'' )。それは、特定のHTTPメッセージの実装への依存を防ぐためです。
\\
==== 1.4 例外のハンドリング ====
ミドルウェアを使用するアプリケーションは、例外をキャッチしてそれらをレスポンスに変換するコンポーネントを含むことが推奨されます( ''RECOMMENDED'' )。このミドルウェアは、最初に実行されるコンポーネントであり、全ての他の処理をラップすべきです( ''SHOULD'' )。それは、レスポンスが常に生成されることを保証するためです。
\\
===== 2. インターフェース =====
==== 2.1 Psr\Http\Server\RequestHandlerInterface ====
リクエストハンドラーは次のインターフェースを実装する必要があります( ''MUST'' )。
namespace Psr\Http\Server;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
/**
* サーバーリクエストを処理し、レスポンスを生成します。
*
* HTTPリクエストハンドラーは、HTTPレスポンスを生成するためにHTTPリクエストを処理します。
*/
interface RequestHandlerInterface
{
/**
* リクエストを処理し、レスポンスを生成します。
*
* レスポンスを生成するために、他の協調するコードを呼び出すことができます。
*/
public function handle(ServerRequestInterface $request): ResponseInterface;
}
\\
==== 2.2 Psr\Http\Server\MiddlewareInterface ====
互換性のあるミドルウェアコンポーネントは次のインターフェースを実装する必要があります( ''MUST'' )。
namespace Psr\Http\Server;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
/**
* サーバーのリクエストとレスポンスを処理する参加者。
*
* HTTPミドルウェアコンポーネントは、HTTPメッセージの処理に参加します:
* つまり、リクエストに基づいて動作するか、レスポンスを生成するか、
* または リクエストを後続のミドルウェアに転送し場合によってはそのレスポンスに基づいて動作します。
*/
interface MiddlewareInterface
{
/**
* 着信サーバー要求を処理します。
*
* レスポンスを生成するために、着信サーバーリクエストを処理します。
* レスポンス自体を生成できない場合は、それをするのに提供されたリクエストハンドラーに委任します。
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface;
}
\\