การแสดงรายการที่เรียงลำดับเป็นหนึ่งในปัญหาที่ยากกับฐานข้อมูลเชิงสัมพันธ์ การเพิ่มคุณสมบัติตำแหน่งให้กับความสัมพันธ์แบบสมาชิก - ลิสต์เป็นวิธีที่พบได้บ่อยที่สุดเนื่องจากคุณสามารถดึงข้อมูลรายการที่สั่งซื้อได้อย่างง่ายดายโดยการเพิ่มORDER BY position
ลงในคิวรี SQL ของคุณและเพราะคุณสามารถแทรกรายการในรายการได้โดยง่าย ค่าของสมาชิกรายการก่อนหน้าและถัดไปโดยสมมติว่าตำแหน่งเป็นทศนิยมมากกว่าจำนวนเต็ม
ควรหลีกเลี่ยงการใช้รายการที่เชื่อมโยงเป็นทวีคูณเนื่องจากเป็นการง่ายที่จะทำให้ลิงก์ไม่สอดคล้องกันโดยไม่ได้ตั้งใจและจบลงด้วยกราฟหรือแผนภูมิต้นไม้แทน
อย่างไรก็ตาม RESTful API ไม่ได้รับผลกระทบจากข้อ จำกัด ของฐานข้อมูลเชิงสัมพันธ์ คุณสามารถทำอะไรบางอย่างที่ให้ความรู้สึกเป็นธรรมชาติมากกว่าการใช้แฮ็คเหมือนคุณสมบัติตำแหน่ง
หากคุณมีองค์ประกอบเพียงไม่กี่ร้อยรายการในรายการเพียงโอนรายการทั้งหมดในคำขอ สมมติว่าเราต้องการจัดลำดับใหม่[1, 2, 3, 4]
ที่สมาชิกรายการเป็น ID เราสามารถทำได้
POST /url/of/the/list
Content-type: application/json
...
[1, 2, 4, 3]
ส่วนหลังอาจแปลสิ่งนี้เป็นเทคโนโลยีฐานข้อมูลใด ๆ ก็ตามที่คุณใช้ แต่ผู้ใช้ API ไม่ต้องพิจารณารายละเอียดเหล่านี้
หากรายการมีขนาดใหญ่และรายการมักจะถูกขอเป็นรายบุคคลคุณสามารถอนุญาตให้ดัชนีใน URL:
GET /page/7
หากคุณเข้าสู่ HATEOAS การตอบสนองอาจรวมลิงค์ก่อนหน้า / ถัดไปเพื่อทำให้การนำทางง่ายขึ้นหากทรัพยากรมักจะถูกใช้เช่นนั้น อย่างไรก็ตามสิ่งนี้ไม่จำเป็นต้องหมายความว่าฐานข้อมูลของคุณมีรายการที่ลิงก์ซ้ำกัน
ถ้ารายการมีขนาดใหญ่มากคุณอาจต้องการที่จะเปิดเผยArrayList
เหมือนการดำเนินการเช่นinsert
หรือ/push
append
ฉันนึกภาพการโทรออกเช่น
POST /url/of/the/list?at=1357;mode=insert
...
description of the item to insert
หากการเรียงลำดับใหม่เป็นกรณีการใช้งานทั่วไปและควรทำการจัดลำดับใหม่ทันทีคุณสามารถเสนอจุดปลายทางที่เหมาะสมใน API ของคุณ:
POST /url/of/the/list/reorder-item?from=783;to=1357
หากรายการที่จัดลำดับใหม่ควรถูกกำหนดอย่างชัดเจนจะง่ายกว่าที่จะโอนคำสั่งซื้อใหม่เป็นเอกสาร JSON ดูด้านบน
ตอนนี้ไม่เป็นความจริงเลยที่คุณสามารถดู API ของคุณแยกจากเทคโนโลยีฐานข้อมูลที่คุณใช้ อย่างไรก็ตามจะเป็นการดีที่สุดที่จะรักษา API ภายนอกให้ว่างที่สุดจากรายละเอียดการใช้งาน หากการเรียงลำดับใหม่แตะประมาณ 30 แถวเพียงเพื่ออัปเดตคอลัมน์คำสั่งซื้อจำนวนเต็มนั่นไม่ใช่เรื่องใหญ่ เพียงทำสิ่งที่ง่ายที่สุดเท่าที่จะทำได้และอัปเดตรายการทั้งหมด หากเครื่องชั่งของคุณต้องการการใช้ฐานข้อมูลของคุณมีความซับซ้อนมากขึ้นคุณควรเก็บความซับซ้อนนี้ไว้ในแบ็กเอนด์ซึ่งง่ายต่อการรักษาความมั่นคง