ดังนั้นจึงไม่มีอะไรใหม่ที่นี่ฉันแค่พยายามที่จะได้รับการชี้แจงและดูเหมือนจะไม่พบในโพสต์อื่น ๆ
ฉันกำลังสร้างทรัพยากรใหม่อย่างสงบพูด:
/books (POST)
กับร่างกาย:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
ฉันรู้ว่าฉันควรส่งคืน 201 (สร้าง) ด้วยส่วนหัว Location ของทรัพยากรใหม่:
Location: /books/12345
คำถามที่ฉันไม่สามารถตอบได้ก็คือสิ่งที่เซิร์ฟเวอร์ควรส่งคืนในร่างกาย
ฉันได้ตอบกลับประเภทนี้บ่อยครั้ง:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
ฉันได้ทำสิ่งนี้ด้วยเหตุผลสองสามประการ:
- ฉันได้เขียน API สำหรับเฟรมเวิร์กเอนด์เช่น angularjs ในกรณีของฉันโดยเฉพาะฉันใช้ทรัพยากรเชิงมุมและฉันมักจะต้องการเพียงแค่รหัสสำหรับทรัพยากรเพื่อค้นหามัน หากฉันไม่ได้ส่งคืนรหัสในส่วนการตอบกลับฉันจะต้องแยกวิเคราะห์ออกจากส่วนหัว Location
- ใน GET ของหนังสือทั้งหมดฉันมักจะคืนค่าวัตถุทั้งหมดไม่ใช่แค่ id ในกรณีนี้รหัสลูกค้าของฉันไม่จำเป็นต้องแยกความแตกต่างว่าจะรับ ID จากที่ใด (ส่วนหัวสถานที่ตั้งหรือเนื้อหา)
ตอนนี้ฉันรู้ว่าฉันอยู่ในพื้นที่สีเทาที่นี่จริง ๆ แต่คนส่วนใหญ่บอกว่าการคืนทรัพยากรทั้งหมดเป็นการปฏิบัติที่ไม่ดี แต่ถ้าเซิร์ฟเวอร์มีการเปลี่ยนแปลง / เพิ่มข้อมูลให้กับทรัพยากร มันเพิ่มรหัสแน่นอน แต่อาจเพิ่มสิ่งอื่น ๆ เช่นการประทับเวลา ในกรณีที่ฉันไม่ส่งคืนทรัพยากรทั้งหมดจะเป็นการดีกว่าที่จะทำ POST ส่งคืน id จากนั้นให้ไคลเอนต์ดำเนินการ GET เพื่อรับทรัพยากรใหม่