RESTful API ควรให้ข้อมูลสำหรับทั้งฟอร์มหรือไม่


13

สมมติว่าฉันมีเว็บแอปพลิเคชัน JavaScript ซึ่งใช้ RESTful API สำหรับข้อมูลทั้งหมด

สมมติว่าแอปพลิเคชันนี้มีฟอร์มข้อมูลและสมมติว่าฉันกำลังแก้ไขระเบียนที่ / product / 12345 เมื่อสร้างแบบฟอร์มฉันขอ RESTful ให้กับ / product / 12345 และรับข้อมูล JSON:

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

ดังนั้นแบบฟอร์มของฉันอาจมีรายการแบบเลื่อนลงสำหรับการเลือกพนักงานขาย ฉันต้องการเติมรายการนี้ ข้อมูลควรมาจากไหน วิธีที่พบมากที่สุดคืออะไร

มันจะสมเหตุสมผลไหมที่จะทำให้มันเป็นส่วนหนึ่งของการตอบสนองคำขอ / product / 12345

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

เกิดอะไรขึ้นเมื่อสร้างเรกคอร์ดใหม่ API ของฉันควรตอบสนองต่อ GET / ผลิตภัณฑ์ / ใหม่ด้วยสิ่งต่อไปนี้หรือไม่?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}

โปรดอย่าใช้คำขอ GET เพื่อสร้างบางสิ่ง ปลายทางของคุณควรจะ/ สินค้า ไม่ได้/ สินค้า / ใหม่ ในการสร้างผลิตภัณฑ์ใหม่คุณควรส่งคำขอ PUT ไปยังจุดสิ้นสุดนั้น
Kerem Baydoğan

นี่ไม่ได้สร้างอะไรเลย นี่คือคำขอล้วนสำหรับข้อมูลที่มีอยู่หรือแม่แบบสำหรับบันทึกใหม่ที่ยังไม่ได้บันทึก
ชาดจอห์นสัน

โอ้ขอโทษตอนนี้ฉันเห็นสิ่งที่คุณหมายถึง ไม่ว่าจุดสิ้นสุดของผลิตภัณฑ์จะไม่รับผิดชอบในการจัดทำเทมเพลตผลิตภัณฑ์หรือรายการค่าสำหรับหล่นลงฟอร์มการสร้างผลิตภัณฑ์ ตามที่ @Dan บอกว่าเพียงแค่สร้างจุดปลายแยกต่างหากและใช้ส่วนหัวแคชเพื่อให้เบราว์เซอร์ของคุณสามารถแคชค่าแบบหล่นลงเพื่อประสิทธิภาพ
Kerem Baydoğan

คำตอบ:


6

ฉันโน้มตัวไปยังจุดสิ้นสุดที่เรียบง่ายและมุ่งเน้นไปที่แคบมาก ฉันคาดหวังว่าจะมีคำขอในบางตำแหน่งเช่น / sales_users ซึ่งส่งคืนผู้ใช้การขายทั้งหมด

GET / sales_users:

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

ในทำนองเดียวกันหากคุณจะมีรายการหมวดหมู่ฉันจะเพิ่มจุดสิ้นสุดแยกต่างหากสำหรับสิ่งนั้น

GET / หมวดหมู่:

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

ฉันจะไม่สร้าง GET / ผลิตภัณฑ์ / ใหม่ แต่ฉันจะสร้างแบบฟอร์มในแอปของคุณเพื่อจัดการกับการเพิ่มผลิตภัณฑ์ใหม่ที่รู้คำขอที่เหมาะสมเพื่อเติมรายการของมัน (เช่น GET / หมวดหมู่ GET / sales_users ฯลฯ )


3

สมมติว่ารายชื่อพนักงานขายค่อนข้างคงที่ฉันคิดว่าคุณต้องการการเรียก API แยกต่างหาก/salesusersที่คุณสามารถโทรได้ครั้งเดียว (เมื่อโหลดแบบฟอร์ม ฯลฯ ) และบันทึกไว้เพื่อให้คุณไม่ต้องขอข้อมูลนี้อีกครั้ง เวลา. โปรดจำไว้ใน REST คุณกำลังจัดระเบียบ API ของคุณเกี่ยวกับทรัพยากรและพนักงานขายแยกทรัพยากรอย่างมีเหตุผลออกจากผลิตภัณฑ์

ในทำนองเดียวกันเมื่อโทร/product/newคุณจะต้องการส่งข้อมูลสำหรับผลิตภัณฑ์ใหม่ซึ่งอาจรวมถึงรหัส sales_user แต่ไม่มีอะไรเพิ่มเติม การเปลี่ยนแปลงกับ sales_user นั้นจะเป็นการโทรแยกต่างหาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.