ตามสถานการณ์ด้านล่าง
สมมติว่ามีคนส่งคำขอไปยังเซิร์ฟเวอร์ของคุณด้วยข้อมูลที่อยู่ในรูปแบบที่ถูกต้อง แต่ไม่ใช่ข้อมูลที่ "ดี" ตัวอย่างเช่นสมมติว่ามีคนโพสต์ค่า String ไว้ที่จุดปลาย API ที่คาดว่าจะเป็นค่าสตริง แต่ค่าของสตริงมีข้อมูลที่ถูกขึ้นบัญชีดำ (เช่นป้องกันไม่ให้ผู้คนใช้ "รหัสผ่าน" เป็นรหัสผ่าน) รหัสสถานะอาจเป็น 400 หรือ 422
จนถึงตอนนี้ฉันจะคืน "400 คำขอไม่ถูกต้อง" ซึ่งตาม w3.org หมายถึง:
เซิร์ฟเวอร์ไม่สามารถเข้าใจการร้องขอได้เนื่องจากไวยากรณ์ผิดรูปแบบ ลูกค้าไม่ควรทำซ้ำการร้องขอโดยไม่มีการดัดแปลง
คำอธิบายนี้ไม่เหมาะกับสถานการณ์ แต่ถ้าคุณไปตามรายการรหัสสถานะ HTTP หลักที่กำหนดไว้ในโปรโตคอล HTTP / 1.1 นั่นอาจเป็นวิธีที่ดีที่สุดของคุณ
อย่างไรก็ตามเมื่อเร็ว ๆ นี้มีคนจากทีม Dev ของฉันชี้ให้เห็นว่า [API] ที่เป็นที่นิยมนั้นกำลังเริ่มใช้ส่วนขยาย HTTP เพื่อรับข้อมูลที่ละเอียดยิ่งขึ้นด้วยการรายงานข้อผิดพลาดที่ละเอียดยิ่งขึ้น โดยเฉพาะอย่างยิ่ง APIs จำนวนมากเช่น Twitter และ Recurly กำลังใช้รหัสสถานะ "422 Unprocessable Entity" ตามที่กำหนดไว้ในส่วนขยาย HTTP สำหรับ WebDAV รหัสสถานะ HTTP 422 สถานะ:
รหัสสถานะ 422 (หน่วยประมวลผลไม่ได้) หมายความว่าเซิร์ฟเวอร์เข้าใจประเภทเนื้อหาของเอนทิตีที่ร้องขอ (ดังนั้นรหัสสถานะ 415 (ประเภทสื่อที่ไม่สนับสนุน) ไม่เหมาะสม) และไวยากรณ์ของเอนทิตีที่ร้องขอนั้นถูกต้อง (ดังนั้น 400 (คำขอไม่ถูกต้อง) ) รหัสสถานะไม่เหมาะสม) แต่ไม่สามารถประมวลผลคำแนะนำที่มีอยู่ ตัวอย่างเช่นเงื่อนไขข้อผิดพลาดนี้อาจเกิดขึ้นหากเนื้อความคำขอ XML มีรูปแบบที่ถูกต้อง (เช่นถูกต้องทางไวยากรณ์) แต่คำสั่ง XML ผิดพลาดทางอรรถศาสตร์
กลับไปที่ตัวอย่างรหัสผ่านของเราจากด้านบนรหัสสถานะ 422 นี้ให้ความรู้สึกที่เหมาะสมมากกว่า เซิร์ฟเวอร์เข้าใจสิ่งที่คุณพยายามทำ และเข้าใจข้อมูลที่คุณกำลังส่ง มันจะไม่ยอมให้มีการประมวลผลข้อมูล