該函式庫提供了 IETF Problem Details for HTTP API (RFC 9457) 的簡單直接實作。
RFC 9457 是一個簡單規範,用於格式化網路上 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 規範。