このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
psr:psr18 [2020/08/25 11:34] tanaka [クライアント] |
psr:psr18 [2020/08/28 16:24] y2sunlight [NetworkExceptionInterface] |
||
---|---|---|---|
行 31: | 行 31: | ||
--- // 原文より翻訳 [[https:// | --- // 原文より翻訳 [[https:// | ||
- | |||
- | This document describes a common interface for sending HTTP requests and receiving HTTP responses. | ||
このドキュメントでは、HTTPリクエストを送信し、HTTPレスポンスを受信するための一般的なインターフェースについて説明します。 | このドキュメントでは、HTTPリクエストを送信し、HTTPレスポンスを受信するための一般的なインターフェースについて説明します。 | ||
- | |||
- | The key words “MUST”, “MUST NOT”, “REQUIRED”, | ||
このドキュメントのキーワード '' | このドキュメントのキーワード '' | ||
行 50: | 行 46: | ||
===== 目標 ====== | ===== 目標 ====== | ||
- | |||
- | The goal of this PSR is to allow developers to create libraries decoupled from HTTP client implementations. This will make libraries more reusable as it reduces the number of dependencies and lowers the likelihood of version conflicts. | ||
このPSRの目標は、開発者がHTTPクライアントの実装から分離されたライブラリを作成できるようにすることです。これにより、依存関係の数が減り、バージョンの競合の可能性が低くなるため、ライブラリの再利用性が高まります。 | このPSRの目標は、開発者がHTTPクライアントの実装から分離されたライブラリを作成できるようにすることです。これにより、依存関係の数が減り、バージョンの競合の可能性が低くなるため、ライブラリの再利用性が高まります。 | ||
- | A second goal is that HTTP clients can be replaced as per the Liskov substitution principle. This means that all clients MUST behave in the same way when sending a request. | + | 2番目の目標は、[[https:// |
- | + | ||
- | 2番目の目標は、[[https:// | + | |
\\ | \\ | ||
行 63: | 行 55: | ||
===== 定義 ====== | ===== 定義 ====== | ||
- | * クライアント - クライアントは、PSR-7互換のHTTPリクエストメッセージを送信し、PSR-7互換のHTTPレスポンスメッセージを呼び出し側ライブラリに返す目的でこの仕様を実装するライブラリです。 | + | * '' |
- | * 呼び出しライブラリ - 呼び出しライブラリは、このPSRで定義されているHTTP'' | + | * 呼び出しライブラリ |
\\ | \\ | ||
===== クライアント ====== | ===== クライアント ====== | ||
- | |||
- | A Client is an object implementing ClientInterface. | ||
クライアントは、'' | クライアントは、'' | ||
- | A Client | + | **クライアントの選択**( '' |
- | クライアントのMAY-DO: | + | * クライアントは提供されたものから変更されたHTTPリクエストを送信することを選択できます( '' |
+ | * クライアントは呼び出したライブラリに返す前に、受信したHTTPレスポンスを変更することを選択できます( '' | ||
- | * Choose to send an altered | + | クライアントがHTTPリクエストまたはHTTPレスポンスのいずれかを変更することを選択した場合、オブジェクトが内部的に一貫していることを保証する必要があります( '' |
- | * Choose to alter a received | + | |
- | * クライアントは、提供されたものから変更されたHTTPリクエストを送信することを選択できます( '' | + | その結果、[[https:// |
- | * クライアントは、呼び出したライブラリに返す前に、受信したHTTPレスポンスを変更することを選択できます( '' | + | |
- | If a Client chooses to alter either the HTTP request or HTTP response, it MUST ensure that the object remains internally consistent. For example, if a Client chooses to decompress the message body then it MUST also remove the Content-Encoding header and adjust the Content-Length header. | + | **クライアントの義務**( '' |
- | クライアントがHTTPリクエストまたはHTTPレスポンスのいずれかを変更することを選択した場合、オブジェクトが内部的に一貫していることを保証する必要があります( | + | * クライアントは呼び出し元ライブラリに返されるものがステータスコード200以上の有効なHTTPレスポンスになるように、マルチステップHTTP 1xxレスポンス自体を再構成する必要があります( '' |
- | Note that as a result, since PSR-7 objects are immutable, the Calling Library MUST NOT assume that the object passed to ClientInterface:: | + | \\ |
- | その結果、[[https:// | + | ===== エラー処理 ====== |
- | A Client | + | クライアントは、整形式のHTTPリクエストまたはHTTPレスポンスをエラー状態として扱わないでください( '' |
- | クライアントのMUST-DO: | + | クライアントは、HTTPリクエストをまったく送信できない場合、または HTTPレスポンスを PSR-7 レスポンスオブジェクトにパースできなかった場合にのみ、'' |
- | * Reassemble a multi-step | + | リクエストメッセージが整形式のHTTPリクエストではないか、重要な情報(ホストやメソッドなど)がないためにリクエストを送信できない場合、クライアントは '' |
- | * クライアントは、呼び出し元ライブラリに返されるものがステータスコード200以上の有効なHTTPレスポンスになるように、マルチステップHTTP 1xxレスポンス自体を再構成する必要があります( '' | + | タイムアウトを含むあらゆる種類のネットワーク障害が原因でリクエストを送信できない場合、クライアントは |
- | \\ | + | クライアントは、上記で定義された適切なインターフェースを実装している場合、ここで定義されたものよりも具体的な例外(例えば、 '' |
- | + | ||
- | ===== エラー処理 ====== | + | |
\\ | \\ | ||
行 111: | 行 98: | ||
<code php ClientInterface.php> | <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; | ||
+ | } | ||
</ | </ | ||
行 118: | 行 123: | ||
<code php ClientExceptionInterface.php> | <code php ClientExceptionInterface.php> | ||
+ | namespace Psr\Http\Client; | ||
+ | |||
+ | /** | ||
+ | * すべてのHTTPクライアント関連の例外は、このインターフェイスを実装する必要があります。 | ||
+ | */ | ||
+ | interface ClientExceptionInterface extends \Throwable | ||
+ | { | ||
+ | } | ||
</ | </ | ||
行 125: | 行 138: | ||
<code php RequestExceptionInterface.php> | <code php RequestExceptionInterface.php> | ||
+ | namespace Psr\Http\Client; | ||
+ | |||
+ | use Psr\Http\Message\RequestInterface; | ||
+ | |||
+ | /** | ||
+ | * リクエストが失敗した場合の例外。 | ||
+ | * | ||
+ | * 例: | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | interface RequestExceptionInterface extends ClientExceptionInterface | ||
+ | { | ||
+ | /** | ||
+ | * リクエストを返します。 | ||
+ | * | ||
+ | * リクエストオブジェクトは、ClientInterface:: | ||
+ | * 異なるオブジェクトである可能性があります | ||
+ | * | ||
+ | * @return RequestInterface | ||
+ | */ | ||
+ | public function getRequest(): | ||
+ | } | ||
</ | </ | ||
行 132: | 行 168: | ||
<code php NetworkExceptionInterface.php> | <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(): | ||
+ | } | ||
</ | </ | ||
\\ | \\ | ||
- | |||