توفر هذه المكتبة تنفيذًا بسيطًا ومباشرًا لتفاصيل مشكلة IETF لواجهات برمجة تطبيقات HTTP، RFC 9457.
RFC 9457 عبارة عن مواصفات بسيطة لتنسيق استجابات الأخطاء من واجهات برمجة تطبيقات RESTful على الويب. توفر هذه المكتبة طريقة بسيطة ومريحة للتفاعل مع تلك المواصفات. وهو يدعم إنشاء وتحليل رسائل 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
الخاص بك إلى كائن PSR-7 ResponseInterface
، باستخدام مصنع 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 );
يؤدي ذلك إلى إعادة كائن استجابة كامل الوظائف ومميز، وجاهز لإرساله مرة أخرى إلى العميل.
هل ترسل رسائل إلى واجهة برمجة التطبيقات (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
راجع وثائق الملحن لمزيد من التفاصيل.
إذا اكتشفت أي مشكلات متعلقة بالأمان، فيرجى استخدام نموذج الإبلاغ الأمني على GitHub بدلاً من قائمة انتظار المشكلات.
تم إصدار هذه المكتبة بموجب ترخيص MIT. باختصار، "اترك بيان حقوق النشر كما هو، وإلا استمتع." راجع الترخيص لمزيد من المعلومات.
تم قبول طلبات السحب! الهدف هو التوافق الكامل مع مواصفات IETF.