ฉันมีจุดสิ้นสุดดังต่อไปนี้:
a/{id}/b
และต้องการสร้างb
พร้อมกับส่งPOST
คำขอไปยังมัน ถ้าa
มีให้{id}
ไม่ได้พบว่าผมควรจะตอบสนองด้วย404 NOT_FOUND
หรืออาจจะมี409 CONFLICT
?
มันคือการจัดการธรรมดาa/{id}
เคล็ดลับคือที่นี่มีการใช้แหล่งข้อมูลย่อย
ฉันมีจุดสิ้นสุดดังต่อไปนี้:
a/{id}/b
และต้องการสร้างb
พร้อมกับส่งPOST
คำขอไปยังมัน ถ้าa
มีให้{id}
ไม่ได้พบว่าผมควรจะตอบสนองด้วย404 NOT_FOUND
หรืออาจจะมี409 CONFLICT
?
มันคือการจัดการธรรมดาa/{id}
เคล็ดลับคือที่นี่มีการใช้แหล่งข้อมูลย่อย
คำตอบ:
404 NOT FOUND
ดูเหมือนเป็นการตอบสนองที่เหมาะสมเนื่องจากไม่มีทรัพยากรที่มี ID นี้ มันชัดเจนมากที่จะเข้าใจและคุณคาดหวังว่าจะได้รับคำตอบเหมือนกันถ้าa/{id}
ถูกเรียก
409 CONFLICT
ดูเหมือนจะไม่ใช่ตัวเลือกที่ดีกว่าเพราะในตัวอย่างของคุณคุณจะคืนค่า 409 เมื่อไม่พบทรัพยากรหลัก:)
แต่โปรดจำไว้ว่าสิ่งที่สำคัญที่สุดนั้นสอดคล้องกันใน API ของคุณ
id
) คือ 404 แต่ถ้าโฟลเดอร์ถูกส่งผ่านในเนื้อความสิ่งนี้อาจเป็นอย่างอื่น (412, 422 ... บางสิ่งบางอย่างเพื่อแทน "การตรวจสอบความถูกต้องล้มเหลว: โฟลเดอร์ไม่ ไม่มีอยู่ ") เป็นคำถามที่ดีในการถามและพูดคุย
นอกจากคำตอบของ @ Dherik
URIs เป็นตัวระบุดังนั้นเราต้องจำไว้ว่า ( /a/{id}/b
เป็นตัวระบุ) URIเป็นความหมายสำหรับ WWW และอื่น ๆ สำหรับลูกค้าของ HTTP
404เป็นคำตอบที่ถูกต้อง โดยพื้นฐานแล้วเซิร์ฟเวอร์กำลังตอบรับ
ฉันไม่พบทรัพยากรใด ๆ ที่มีรหัสดังกล่าว ไม่พบทรัพยากร 1
ไม่ว่าจะเป็นทรัพยากรที่ขาดหายไปเป็นผู้ปกครองหรือเด็กไม่สำคัญ
เราพัฒนาให้ดูลำดับชั้นและเส้นทางใน URI แต่ HTTP ลูกค้าไม่ได้ กล่าวอีกนัยหนึ่ง HTTP นั้นหมายถึงการตีความโดยไคลเอนต์ HTTP เท่านั้น แต่ไม่ใช่โดยมนุษย์ (devs, end-users, etc)
ในกรณีที่มีข้อสงสัยอย่าถามรหัสที่เหมาะสมสำหรับคุณ (คน) ถามว่ารหัสใดที่เหมาะสมสำหรับไคลเอ็นต์ HTTP คุณต้องการให้ไคลเอ็นต์ HTTP ทำงานอย่างไร
ทำไม? เนื่องจากรหัสสถานะบางตัวทำให้ไคลเอนต์เหล่านี้ดำเนินการบางอย่าง ยกตัวอย่างเช่น302 รหัสนี้โดยปกติจะทำให้เว็บเบราว์เซอร์เปลี่ยนเส้นทางไปยังตำแหน่งที่ระบุ (URI) ที่แจ้งไว้ในส่วนหัวการตอบกลับ
นี่อาจไม่ใช่กรณีของคุณ แต่สิ่งสำคัญที่ควรระวัง ในที่สุดรหัสสถานะ HTTP จะถูกส่งไปยังไคลเอนต์ HTTP ไม่ใช่แอปพลิเคชันของเรา ไม่ให้กับบุคคล
1: 409ไม่ค่อยมีการนำมาใช้เนื่องจากข้อผิดพลาดในการนำทาง มันมักจะเกี่ยวข้องกับการดำเนินการของการดำเนินการระยะไกล (ลบอัพเดทใหม่ ฯลฯ ) แต่ควรมี URI มิฉะนั้น 404 จะเหนือกว่า