このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
psr:psr18 [2020/07/28 14:15] tanaka 作成 |
psr:psr18 [2020/09/01 11:55] (現在) tanaka [PSR-18: HTTP Client] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > 編集中 | ||
- | |||
====== PSR-18: HTTP Client ====== | ====== PSR-18: HTTP Client ====== | ||
行 24: | 行 22: | ||
* [[psr: | * [[psr: | ||
* PSR-18: HTTP Client - HTTPクライアント | * PSR-18: HTTP Client - HTTPクライアント | ||
- | * [[psr: | + | * [[psr: |
----- | ----- | ||
====== PSR-18: HTTPクライアント ====== | ====== PSR-18: HTTPクライアント ====== | ||
- | >TODO | + | |
+ | --- // 原文より翻訳 [[https:// | ||
+ | |||
+ | このドキュメントでは、HTTPリクエストを送信し、HTTPレスポンスを受信するための一般的なインターフェースについて説明します。 | ||
+ | |||
+ | このドキュメントのキーワード '' | ||
+ | |||
+ | > **RFC 2119の説明** | ||
+ | > '' | ||
+ | > '' | ||
+ | > '' | ||
+ | > '' | ||
+ | > '' | ||
\\ | \\ | ||
+ | |||
+ | ===== 目標 ====== | ||
+ | |||
+ | このPSRの目標は、開発者がHTTPクライアントの実装から分離されたライブラリを作成できるようにすることです。これにより、依存関係の数が減り、バージョンの競合の可能性が低くなるため、ライブラリの再利用性が高まります。 | ||
+ | |||
+ | 2番目の目標は、[[https:// | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== 定義 ====== | ||
+ | |||
+ | * '' | ||
+ | * 呼び出しライブラリ --- 呼び出しライブラリは、このPSRで定義されているHTTP'' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== クライアント ====== | ||
+ | |||
+ | クライアントは、'' | ||
+ | |||
+ | **クライアントの選択**( '' | ||
+ | |||
+ | * クライアントは提供されたものから変更されたHTTPリクエストを送信することを選択できます( '' | ||
+ | * クライアントは呼び出したライブラリに返す前に、受信したHTTPレスポンスを変更することを選択できます( '' | ||
+ | |||
+ | クライアントがHTTPリクエストまたはHTTPレスポンスのいずれかを変更することを選択した場合、オブジェクトが内部的に一貫していることを保証する必要があります( '' | ||
+ | |||
+ | その結果、[[https:// | ||
+ | |||
+ | **クライアントの義務**( '' | ||
+ | |||
+ | * クライアントは呼び出し元ライブラリに返されるものがステータスコード200以上の有効なHTTPレスポンスになるように、マルチステップHTTP 1xxレスポンス自体を再構成する必要があります( '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== エラー処理 ====== | ||
+ | |||
+ | クライアントは、整形式のHTTPリクエストまたはHTTPレスポンスをエラー状態として扱わないでください( '' | ||
+ | |||
+ | クライアントは、HTTPリクエストをまったく送信できない場合、または HTTPレスポンスを PSR-7 レスポンスオブジェクトにパースできなかった場合にのみ、'' | ||
+ | |||
+ | リクエストメッセージが整形式のHTTPリクエストではないか、重要な情報(ホストやメソッドなど)がないためにリクエストを送信できない場合、クライアントは '' | ||
+ | |||
+ | タイムアウトを含むあらゆる種類のネットワーク障害が原因でリクエストを送信できない場合、クライアントは '' | ||
+ | |||
+ | クライアントは、上記で定義された適切なインターフェースを実装している場合、ここで定義されたものよりも具体的な例外(例えば、 '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== インターフェース ====== | ||
+ | |||
+ | ==== ClientInterface ===== | ||
+ | |||
+ | <code php ClientInterface.php> | ||
+ | namespace Psr\Http\Client; | ||
+ | |||
+ | use Psr\Http\Message\RequestInterface; | ||
+ | use Psr\Http\Message\ResponseInterface; | ||
+ | |||
+ | interface ClientInterface | ||
+ | { | ||
+ | /** | ||
+ | * PSR-7リクエストを送信し、PSR-7レスポンスを返します。 | ||
+ | * | ||
+ | * @param RequestInterface $request | ||
+ | * @return ResponseInterface | ||
+ | * | ||
+ | * @throws \Psr\Http\Client\ClientExceptionInterface リクエストの処理中にエラーが発生した場合。 | ||
+ | | ||
+ | */ | ||
+ | public function sendRequest(RequestInterface $request): ResponseInterface; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== ClientExceptionInterface ===== | ||
+ | |||
+ | <code php ClientExceptionInterface.php> | ||
+ | namespace Psr\Http\Client; | ||
+ | |||
+ | /** | ||
+ | * すべてのHTTPクライアント関連の例外は、このインターフェイスを実装する必要があります。 | ||
+ | */ | ||
+ | interface ClientExceptionInterface extends \Throwable | ||
+ | { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== RequestExceptionInterface ===== | ||
+ | |||
+ | <code php RequestExceptionInterface.php> | ||
+ | namespace Psr\Http\Client; | ||
+ | |||
+ | use Psr\Http\Message\RequestInterface; | ||
+ | |||
+ | /** | ||
+ | * リクエストが失敗した場合の例外。 | ||
+ | * | ||
+ | * 例: | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | interface RequestExceptionInterface extends ClientExceptionInterface | ||
+ | { | ||
+ | /** | ||
+ | * リクエストを返します。 | ||
+ | * | ||
+ | * リクエストオブジェクトは、ClientInterface:: | ||
+ | * 異なるオブジェクトである可能性があります | ||
+ | * | ||
+ | * @return RequestInterface | ||
+ | */ | ||
+ | public function getRequest(): | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== NetworkExceptionInterface ===== | ||
+ | |||
+ | <code php NetworkExceptionInterface.php> | ||
+ | namespace Psr\Http\Client; | ||
+ | |||
+ | use Psr\Http\Message\RequestInterface; | ||
+ | |||
+ | /** | ||
+ | * ネットワークの問題のためにリクエストを完了できない場合にスローされます。 | ||
+ | * | ||
+ | * この例外は、応答が受信されなかった場合にスローされるため、応答オブジェクトはありません。 | ||
+ | * | ||
+ | * 例:ターゲットホスト名を解決できないか、接続が失敗しました。 | ||
+ | */ | ||
+ | interface NetworkExceptionInterface extends ClientExceptionInterface | ||
+ | { | ||
+ | /** | ||
+ | * Returns the request. | ||
+ | * | ||
+ | * リクエストオブジェクトは、ClientInterface:: | ||
+ | * 異なるオブジェクトである可能性があります | ||
+ | * | ||
+ | * @return RequestInterface | ||
+ | */ | ||
+ | public function getRequest(): | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ |