ไลบรารีนี้จัดเตรียมการใช้งาน IETF รายละเอียดปัญหาสำหรับ HTTP APIs, 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
ของคุณเป็นออบเจ็กต์ 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 โดยสมบูรณ์