การตอบสนองที่เหมาะสมสำหรับส่วนที่เหลือ REST - บันทึกใหม่เต็มหรือเพียงแค่ค่ารหัสบันทึก?


15

ฉันกำลังสร้าง REST API ที่อนุญาตให้มีการแทรก (POST ไม่ใช่ idempotent) และอัปเดต (PUT, idempotent) เพื่อเพิ่ม / อัปเดตฐานข้อมูลไปยังแอปพลิเคชันของเรา

ฉันสงสัยว่ามีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดเกี่ยวกับข้อมูลที่เราส่งกลับไปยังลูกค้าในการตอบสนองสำหรับการดำเนินการ POST (แทรก) เราจำเป็นต้องส่งกลับอย่างน้อยค่าบันทึก ID (เช่นบันทึกใหม่ของคุณคือบันทึก # 1234)

เราควรตอบสนองกับวัตถุเต็มหรือไม่? (เช่นโดยพื้นฐานแล้วคำตอบเดียวกับที่พวกเขาได้รับกลับมาจากคำขอ "GET / object_type / 1234")

เราควรตอบสนองด้วยค่า ID ใหม่เท่านั้นหรือไม่ (เช่น "{id: 1234}" ซึ่งหมายความว่าหากพวกเขาต้องการที่จะดึงข้อมูลทั้งหมดพวกเขาจำเป็นต้องทำคำขอ HTTP GET เพิ่มเติมเพื่อคว้าบันทึกทั้งหมด)

ส่วนหัวเปลี่ยนเส้นทางชี้ไปที่ URL สำหรับวัตถุเต็มหรือไม่

มีอะไรอีกบ้าง?


ฉัน OOT แน่ใจเกี่ยวกับการปฏิบัติที่ดีที่สุด แต่สำหรับผมเองผมก็อาจจะพิจารณาเพียงแค่กลับ ID ที่สร้างขึ้นใหม่ถ้าประสบความสำเร็จเป็นอย่างอื่น -1 ฯลฯ มีความสนใจที่จะเห็นสิ่งที่คนอื่นบอกว่า
dreza

คำตอบ:


13

ในอินเทอร์เฟซ REST ตาม HTTP เท่าที่จะทำได้ฉันจะส่งคืน 201 และ URI ในฟิลด์ส่วนหัว Location ไปยังทรัพยากรที่สร้างขึ้นใหม่ นี่คือสิ่งที่นิยามรหัสสถานะบอกว่า:

10.2.2 201 สร้างแล้ว

การร้องขอสำเร็จแล้วและส่งผลให้มีการสร้างทรัพยากรใหม่ ทรัพยากรที่สร้างขึ้นใหม่สามารถอ้างอิงได้โดย URI ที่ส่งคืนในเอนทิตีของการตอบกลับพร้อมกับ URI ที่เฉพาะเจาะจงที่สุดสำหรับทรัพยากรที่กำหนดโดยฟิลด์ส่วนหัว Location การตอบสนองควรรวมถึงเอนทิตีที่มีรายการคุณสมบัติของทรัพยากรและตำแหน่งที่ผู้ใช้หรือตัวแทนผู้ใช้สามารถเลือกได้อย่างเหมาะสมที่สุด รูปแบบเอนทิตีถูกระบุโดยประเภทสื่อที่กำหนดในฟิลด์ส่วนหัวของประเภทเนื้อหา เซิร์ฟเวอร์ต้นทางต้องสร้างทรัพยากรก่อนส่งคืนรหัสสถานะ 201 หากการดำเนินการไม่สามารถดำเนินการได้ทันทีเซิร์ฟเวอร์ SHOULD ตอบกลับด้วยการตอบสนอง 202 (ยอมรับ) แทน

หากมีข้อผิดพลาดเกิดขึ้นฉันจะโต้แย้งว่าคุณไม่ควรกลับมา-1อย่างที่คนอื่นพูด แต่เพียงลูกค้าหรือรหัสข้อผิดพลาดเซิร์ฟเวอร์ (4xx หรือ 5xx) ตัวอย่างเช่นหากผู้ใช้ไม่ได้รับอนุญาตให้สร้างทรัพยากรใหม่คุณเพียงแค่ส่งคืน "401 Unauthorized" ไม่มีอะไรมากไปกว่านี้


แล้วร่างกายล่ะ? ว่างเปล่าหรือวัตถุที่สร้างขึ้นใหม่ทั้งหมดในการตอบสนอง?
นักพัฒนา

ตัวเลือกทั่วไปสองอย่างที่ฉันรู้คือ 1) การตั้งค่าส่วนหัวของตำแหน่งเป็นที่ซึ่งสามารถพบเอนทิตีใหม่หรือ 2) รวมถึงเอนทิตีใหม่ในเนื้อหา ส่วนตัวแล้วฉันไปด้วยเหตุผลในทางปฏิบัติ Somtimes รวมกันเพื่อความรู้สึกผ่อนคลายมากขึ้น)
Bruno Schäpper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.