このライブラリは、HTTP API の IETF 問題の詳細 (RFC 9457) のシンプルで直接的な実装を提供します。
RFC 9457 は、Web 上の RESTful API からのエラー応答をフォーマットするための単純な仕様です。このライブラリは、その仕様を操作するためのシンプルで便利な方法を提供します。 JSON と XML の両方のバリアントで RFC 9457 メッセージの生成と解析をサポートします。
何言ってるの?誰かがあなたの API に不正なリクエストを送信しましたか?それは問題だと彼らに伝えてください!
use Crell ApiProblem ApiProblem ;
$ problem = new ApiProblem ( " You do not have enough credit. " , " http://example.com/probs/out-of-credit " );
// Defined properties in the API have their own setter methods.
$ problem
-> setDetail ( " Your current balance is 30, but that costs 50. " )
-> setInstance ( " http://example.net/account/12345/msgs/abc " );
// But you can also support any arbitrary extended properties!
$ problem [ ' balance ' ] = 30 ;
$ problem [ ' accounts ' ] = [
" http://example.net/account/12345 " ,
" http://example.net/account/67890 "
];
$ json_string = $ problem -> asJson ();
// Now send that JSON string as a response along with the appropriate HTTP error
// code and content type which is available via ApiProblem ::CONTENT_TYPE_JSON.
// Also check out asXml() and ApiProblem ::CONTENT_TYPE_XML for the angle-bracket fans in the room.
または、さらに良いことに、特定の問題の種類に応じてApiProblemをサブクラス化し (種類とタイトルは連携し、比較的固定されると考えられているため)、独自のエラー固有のデータを入力するだけです。例外を拡張するのと同じです。
独自の JSON シリアル化を行うライブラリまたはフレームワークを使用している場合、それも完全にサポートされます。 ApiProblem JsonSerializable
を実装しているため、裸の配列であるかのようにjson_encode()
に直接渡すことができます。
$ response = new MyFrameworksJsonResponse ( $ problem );
// Or do it yourself
$ body = json_encode ( $ problem );
おそらく応答に PSR-7 を使用しているでしょう。このため、このライブラリには、選択した PSR-17 ファクトリを使用して、 ApiProblem
オブジェクトを PSR-7 ResponseInterface
オブジェクトに変換するユーティリティが含まれています。同様に:
use Crell ApiProblem HttpConverter ;
$ factory = getResponseFactoryFromSomewhere ();
// The second parameter says whether to pretty-print the output.
$ converter = new HttpConverter ( $ factory , true );
$ response = $ converter -> toJsonResponse ( $ problem );
// or
$ response = $ converter -> toXmlResponse ( $ problem );
これにより、完全に機能し、マークされた Response オブジェクトが返され、クライアントに送り返す準備が整います。
API 問題エラーで応答する API にメッセージを送信していますか?問題ない!この応答は次のように簡単に処理できます。
use Crell ApiProblem ApiProblem ;
$ problem = ApiProblem :: fromJson ( $ some_json_string );
$ title = $ problem -> getTitle ();
$ type = $ problem -> getType ();
// Great, now we know what went wrong, so we can figure out what to do about it.
(fromXml() でも機能します!)
他の Composer パッケージと同様にApiProblemインストールします。
composer require crell/api-problem
詳細については、Composer のドキュメントを参照してください。
セキュリティ関連の問題を発見した場合は、問題キューではなく GitHub セキュリティ報告フォームを使用してください。
このライブラリは MIT ライセンスに基づいてリリースされています。一言で言えば、「著作権に関する記述はそのままにしておきます。それ以外の場合は楽しんでください。」詳細については、「ライセンス」を参照してください。
プルリクエストを受け付けています!目標は、IETF 仕様に完全に準拠することです。