400 คำขอไม่ถูกต้องจะเป็นรหัสสถานะ HTTP / 1.1 ที่ดีที่สุดสำหรับกรณีการใช้งานของคุณ
ในช่วงเวลาของคำถามของคุณ (และคำตอบเดิมของฉัน) RFC 7231ไม่ได้เป็นอย่างนั้น ที่จุดที่ฉันคัดค้าน400 Bad Request
เพราะRFC 2616กล่าวว่า (ด้วยการเน้นการเหมือง):
การร้องขอไม่สามารถเข้าใจได้โดยเซิร์ฟเวอร์เนื่องจากไวยากรณ์ไม่ถูกต้อง
และคำขอที่คุณอธิบายนั้นเป็น JSON ที่ถูกต้องทางไวยากรณ์ที่เข้ารหัสใน HTTP ที่ถูกต้องทางไวยากรณ์และทำให้เซิร์ฟเวอร์ไม่มีปัญหาเกี่ยวกับไวยากรณ์ของคำขอ
อย่างไรก็ตาม ในขณะที่ออกมาชี้โดยลี Saferite ในการแสดงความคิดเห็น , RFC 7231 ซึ่ง obsoletes RFC 2616 ไม่รวมถึงข้อ จำกัด ว่า :
รหัสสถานะ 400 (คำขอไม่ถูกต้อง) บ่งชี้ว่าเซิร์ฟเวอร์ไม่สามารถหรือไม่สามารถดำเนินการตามคำขอเนื่องจากสิ่งที่ถูกมองว่าเป็นข้อผิดพลาดของลูกค้า (เช่นไวยากรณ์คำขอผิดรูปแบบ, กรอบข้อความคำขอไม่ถูกต้องหรือการกำหนดเส้นทางคำขอหลอกลวง)
อย่างไรก็ตามก่อนที่จะมีถ้อยคำใหม่ (หรือหากคุณต้องการพูดเล่นเกี่ยวกับ RFC 7231 เป็นเพียงมาตรฐานที่เสนอในตอนนี้) 422 Unprocessable Entity
ดูเหมือนจะไม่ได้รหัสสถานะ HTTP ที่ไม่ถูกต้องสำหรับกรณีการใช้งานของคุณเพราะตามที่แนะนำ RFC 4918 กล่าวว่า:
ในขณะที่รหัสสถานะที่จัดทำโดย HTTP / 1.1 นั้นเพียงพอที่จะอธิบายเงื่อนไขข้อผิดพลาดส่วนใหญ่ที่พบโดยวิธีการของ WebDAV แต่ก็มีข้อผิดพลาดบางอย่างที่ไม่ได้อยู่ในหมวดหมู่ที่มีอยู่อย่างเรียบร้อย ข้อมูลจำเพาะนี้กำหนดรหัสสถานะเพิ่มเติมที่พัฒนาขึ้นสำหรับวิธี WebDAV (ส่วนที่ 11)
และคำอธิบายของ422
พูดว่า:
รหัสสถานะ 422 (หน่วยประมวลผลไม่ได้) หมายความว่าเซิร์ฟเวอร์เข้าใจประเภทเนื้อหาของเอนทิตีที่ร้องขอ (ดังนั้นรหัสสถานะ 415 (ประเภทสื่อที่ไม่สนับสนุน) ไม่เหมาะสม) และไวยากรณ์ของเอนทิตีที่ร้องขอนั้นถูกต้อง (ดังนั้น 400 (คำขอไม่ถูกต้อง) ) รหัสสถานะไม่เหมาะสม) แต่ไม่สามารถประมวลผลคำแนะนำที่มีอยู่
(สังเกตการอ้างอิงถึงไวยากรณ์ฉันสงสัยว่า 7231 บางส่วนเลิก 4918 ด้วย)
เสียงนี้ว่าเหมือนสถานการณ์ของคุณ แต่เพียงในกรณีที่มีข้อสงสัยใด ๆ ก็กล่าวต่อไป:
ตัวอย่างเช่นเงื่อนไขข้อผิดพลาดนี้อาจเกิดขึ้นหากเนื้อความคำขอ XML มีรูปแบบที่ถูกต้อง (เช่นถูกต้องทางไวยากรณ์) แต่คำสั่ง XML ผิดพลาดทางอรรถศาสตร์
(แทนที่ "XML" ด้วย "JSON" และฉันคิดว่าเราสามารถยอมรับได้ว่าเป็นสถานการณ์ของคุณ)
ทีนี้บางคนจะคัดค้านว่า RFC 4918 นั้นเกี่ยวกับ "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)" และคุณ (น่าจะเป็น) ที่กำลังทำอะไรที่เกี่ยวข้องกับ WebDAV ดังนั้นไม่ควรใช้อะไรจากมัน
ด้วยตัวเลือกระหว่างการใช้รหัสข้อผิดพลาดในมาตรฐานดั้งเดิมที่ไม่ครอบคลุมสถานการณ์อย่างชัดเจนและอีกส่วนหนึ่งจากส่วนขยายที่อธิบายถึงสถานการณ์อย่างแน่นอนฉันจะเลือกอย่างหลัง
นอกจากนี้RFC 4918 ส่วนที่ 21.4อ้างถึงIANA Hypertext Transfer Protocol (HTTP) รหัสสถานะการลงทะเบียนซึ่งสามารถพบ 422
ฉันเสนอว่ามันสมเหตุสมผลอย่างยิ่งสำหรับไคลเอนต์ HTTP หรือเซิร์ฟเวอร์ที่จะใช้รหัสสถานะใด ๆ จากรีจิสทรีนั้นตราบใดที่พวกเขาทำอย่างถูกต้อง
แต่เป็น HTTP / 1.1, RFC 7231มีแรงฉุดดังนั้นให้ใช้400 Bad Request
!