Эта библиотека обеспечивает простую и понятную реализацию «Сведения о проблемах IETF для HTTP API», RFC 9457.
RFC 9457 — это простая спецификация для форматирования ответов об ошибках от RESTful API в Интернете. Эта библиотека предоставляет простой и удобный способ взаимодействия с этой спецификацией. Он поддерживает генерацию и анализ сообщений RFC 9457 как в вариантах JSON, так и в XML.
Что ты говоришь? Кто-то отправил вашему 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 для своих ответов. Вот почему эта библиотека включает в себя утилиту для преобразования вашего объекта ApiProblem
в объект ResponseInterface
PSR-7 с использованием фабрики PSR-17 по вашему выбору. Вот так:
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()!)
Установите ApiProblem как любой другой пакет Composer:
composer require crell/api-problem
Более подробную информацию смотрите в документации Composer.
Если вы обнаружите какие-либо проблемы, связанные с безопасностью, используйте форму отчета о безопасности GitHub, а не очередь проблем.
Эта библиотека выпущена под лицензией MIT. Короче говоря, «оставьте заявление об авторских правах нетронутым, иначе получайте удовольствие». См. ЛИЦЕНЗИЮ для получения дополнительной информации.
Запросы на вытягивание принимаются! Целью является полное соответствие спецификации IETF.