สำหรับสิ่งที่คุ้มค่าฉันทำสิ่งนี้แตกต่าง การโทรที่ประสบความสำเร็จมีเพียงวัตถุ JSON ฉันไม่ต้องการออบเจ็กต์ระดับสูงกว่าที่มีฟิลด์ความสำเร็จซึ่งระบุว่าเป็นจริงและฟิลด์เพย์โหลดที่มีวัตถุ JSON ฉันเพิ่งส่งคืนวัตถุ JSON ที่เหมาะสมด้วย 200 หรืออะไรก็ตามที่เหมาะสมในช่วง 200 สำหรับสถานะ HTTP ในส่วนหัว
อย่างไรก็ตามหากมีข้อผิดพลาด (บางอย่างในครอบครัว 400) ฉันส่งคืนวัตถุข้อผิดพลาด JSON ที่มีรูปแบบที่ดี ตัวอย่างเช่นหากลูกค้าโพสต์ผู้ใช้ด้วยที่อยู่อีเมลและหมายเลขโทรศัพท์และหนึ่งในนั้นมีรูปแบบไม่ถูกต้อง (เช่นฉันไม่สามารถแทรกลงในฐานข้อมูลของฉัน) ฉันจะส่งคืนสิ่งนี้:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
บิตสำคัญที่นี่คือคุณสมบัติ "เขตข้อมูล" ต้องตรงกับเขตข้อมูล JSON ที่ไม่สามารถตรวจสอบได้ สิ่งนี้ช่วยให้ลูกค้าทราบได้อย่างแม่นยำว่าเกิดอะไรขึ้นกับคำขอของพวกเขา นอกจากนี้ "ข้อความ" ยังอยู่ในตำแหน่งที่ตั้งของคำขอ หากทั้ง "emailAddress" และ "phoneNumber" ไม่ถูกต้องอาร์เรย์ "ข้อผิดพลาด" จะมีรายการสำหรับทั้งคู่ เนื้อหาการตอบสนอง JSON 409 (ความขัดแย้ง) อาจมีลักษณะเช่นนี้:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
ด้วยรหัสสถานะ HTTP และ JSON นี้ไคลเอ็นต์มีทั้งหมดที่พวกเขาต้องการเพื่อตอบสนองต่อข้อผิดพลาดในทางที่กำหนดและไม่ได้สร้างมาตรฐานข้อผิดพลาดใหม่ที่พยายามที่จะเปลี่ยนรหัสสถานะ HTTP ให้เสร็จสมบูรณ์ หมายเหตุสิ่งเหล่านี้เกิดขึ้นสำหรับช่วง 400 ข้อผิดพลาดเท่านั้น สำหรับทุกสิ่งในช่วง 200 ฉันสามารถคืนสิ่งที่เหมาะสมได้ สำหรับฉันมันมักจะเป็นวัตถุ JSON เหมือน HAL แต่นั่นไม่สำคัญเลย
สิ่งหนึ่งที่ฉันคิดเกี่ยวกับการเพิ่มคือรหัสข้อผิดพลาดที่เป็นตัวเลขทั้งในรายการอาร์เรย์ "ข้อผิดพลาด" หรือรากของวัตถุ JSON เอง แต่จนถึงตอนนี้เราไม่ต้องการมัน