200
ฮึ ... (309, 400, 403, 409, 415, 422) ... จำนวนมากของคำตอบที่พยายามที่จะคาดเดาเถียงและมาตรฐานสิ่งที่เป็นรหัสตอบแทนที่ดีที่สุดสำหรับการร้องขอ HTTP ที่ประสบความสำเร็จแต่โทร REST ล้มเหลว
มันผิดที่จะรวมรหัสสถานะ HTTP และรหัสสถานะ REST
อย่างไรก็ตามฉันเห็นการใช้งานหลายอย่างผสมกันและนักพัฒนาหลายคนอาจไม่เห็นด้วยกับฉัน
รหัสส่งคืน HTTP เกี่ยวข้องกับHTTP Request
ตัวเอง การเรียกใช้ REST เสร็จสิ้นโดยใช้การร้องขอ Hypertext Transfer Protocol และทำงานในระดับที่ต่ำกว่าวิธี REST ที่เรียกใช้ REST เป็นแนวคิด / วิธีการและผลลัพธ์เป็นผลลัพธ์ทางธุรกิจ / ตรรกะในขณะที่โค้ดผลลัพธ์ HTTP คือการส่งผ่าน
ตัวอย่างเช่นการส่งคืน "404 ไม่พบ" เมื่อคุณโทร / ผู้ใช้ / สับสนเนื่องจากอาจหมายถึง:
- URI ผิด (HTTP)
- ไม่พบผู้ใช้ (REST)
"403 ถูกห้าม / ปฏิเสธการเข้าถึง" อาจหมายถึง:
- ต้องได้รับอนุญาตพิเศษ เบราว์เซอร์สามารถจัดการได้โดยขอให้ผู้ใช้ / รหัสผ่าน (HTTP)
- สิทธิ์การเข้าถึงไม่ถูกต้องกำหนดค่าบนเซิร์ฟเวอร์ (HTTP)
- คุณต้องได้รับการรับรองความถูกต้อง (REST)
และรายการอาจดำเนินการต่อด้วย '500 เซิร์ฟเวอร์ข้อผิดพลาด "(ข้อผิดพลาดโยน Apache / Nginx HTTP หรือข้อผิดพลาดข้อ จำกัด ทางธุรกิจในส่วนที่เหลือ) หรือข้อผิดพลาด HTTP อื่น ๆ ฯลฯ ...
จากรหัสนั้นยากที่จะเข้าใจว่าอะไรคือสาเหตุของความล้มเหลวความล้มเหลว HTTP (การขนส่ง) หรือความล้มเหลว REST (ตรรกะ)
หากคำขอ HTTP ดำเนินการทางร่างกายสำเร็จแล้วควรส่งคืนรหัส 200 เสมอไม่ว่าจะพบระเบียนหรือไม่ก็ตาม เนื่องจากพบทรัพยากร URI และจัดการโดยเซิร์ฟเวอร์ HTTP ใช่มันอาจส่งคืนชุดที่ว่างเปล่า เป็นไปได้ไหมที่จะได้รับหน้าเว็บเปล่าที่มี 200 เป็นผลลัพธ์ HTTP ใช่ไหม
แทนที่จะเป็นเช่นนี้คุณอาจส่งคืนรหัส HTTP 200 รายการพร้อมตัวเลือก:
- วัตถุ "error" ในผลลัพธ์ JSON หากมีบางอย่างผิดพลาด
- อาร์เรย์ / วัตถุ JSON ว่างเปล่าหากไม่พบบันทึก
- ค่าสถานะผลลัพธ์ / ความสำเร็จแบบบูลร่วมกับตัวเลือกก่อนหน้าเพื่อการจัดการที่ดีขึ้น
นอกจากนี้ผู้ให้บริการอินเทอร์เน็ตบางรายอาจขัดขวางคำขอของคุณและส่งคืนรหัส HTTP 404 ให้คุณ นี่ไม่ได้หมายความว่าไม่พบข้อมูลของคุณ แต่เป็นสิ่งที่ผิดปกติในระดับการขนส่ง
จากWiki :
ในเดือนกรกฎาคม 2004 กลุ่มผู้ให้บริการโทรคมนาคมของสหราชอาณาจักรกลุ่ม BT ได้ติดตั้งระบบบล็อกเนื้อหา Cleanfeed ซึ่งจะส่งกลับข้อผิดพลาด 404 ไปยังคำขอใด ๆ สำหรับเนื้อหาที่ระบุว่าอาจผิดกฎหมายโดย Internet Watch Foundation ISP อื่น ๆ ส่งคืนข้อผิดพลาด "ต้องห้าม" HTTP 403 ในสถานการณ์เดียวกัน ในประเทศไทยและตูนิเซียมีรายงานการปฏิบัติที่ใช้ข้อผิดพลาดปลอม 404 เพื่อปกปิดการเซ็นเซอร์ ในตูนิเซียที่การเซ็นเซอร์รุนแรงก่อนการปฏิวัติปี 2554 ผู้คนเริ่มตระหนักถึงธรรมชาติของข้อผิดพลาดปลอม 404 และสร้างตัวละครในจินตนาการชื่อ "Ammar 404" ซึ่งเป็นตัวแทนของ "เซ็นเซอร์ที่มองไม่เห็น"
ทำไมไม่ตอบคำถามแบบนี้ด้วยล่ะ?
{
"result": false,
"error": {"code": 102, "message": "Validation failed: Wrong NAME."}
}
Google จะส่งคืน 200 เป็นรหัสสถานะใน API Geocoding ของตนเสมอแม้ว่าคำขอจะล้มเหลวอย่างมีเหตุผล: https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes
Facebook จะส่งคืน 200 เสมอสำหรับคำขอ HTTP ที่ประสบความสำเร็จแม้ว่าคำขอ REST จะล้มเหลว: https://developers.facebook.com/docs/graph-api/using-graph-api/error-handling
ง่ายมากรหัสสถานะ HTTP ใช้สำหรับการร้องขอ HTTP REST API เป็นของคุณกำหนดรหัสสถานะของคุณ