สิ่งที่อยู่ในใจของฉันคือ: อย่าปล่อยให้คุณ RESTful API สะท้อนให้เห็นถึงการเกิดซ้ำใน URL ของตัวเอง ลองคิดดูสิแหล่งข้อมูลของคุณเป็นเพียงเอกสารเท่านั้น
หากคุณมีเอกสารของคุณจัดเก็บทางกายภาพตามโครงสร้างแบบเรียกซ้ำให้สร้างการจับคู่กับ ID ที่ไม่ซ้ำกันและใช้ ID ใน URL:
/rest/documents/{id}
ตอนนี้ถ้าคุณมีเอกสารเช่นนี้:
| DocumentName | DocumentPath | DocumentID |
--------------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| บู | / abc / asd / boo | 4 |
| เฮ้ / abc / asd / hey | 5 |
คำขอจะศึกษา URL นี้สำหรับ/abc/asd
เอกสาร
GET /rest/documents/2
ดังนั้นตอนนี้คุณต้องให้ผู้ใช้ API ของคุณมีวิธีการสำรวจโครงสร้างของคุณด้วยความพยายามเพียงเล็กน้อย ซึ่งสามารถทำได้โดยการห่อข้อมูลการตอบกลับของคุณ (เอกสาร) ลงในวัตถุที่มีข้อมูลการแวะผ่านเพิ่มเติมเช่นนี้
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
หากคุณคาดว่าผู้ใช้จะไม่สร้างเอกสารมากเกินไปในระดับเดียวคุณสามารถรวมรายการลูก ๆ ไว้ในการตอบกลับ หากไม่ใช่กรณีดังกล่าวคุณสามารถเสนอให้ผู้ใช้เรียกใช้ ID เอกสารย่อยได้ดังนั้นการอนุญาตให้เพจสามารถแสดงผลลัพธ์ผ่านพารามิเตอร์การสอบถาม:
GET /rest/documents/2/children?page=2&size=50
ในที่สุดการพูดของพารามิเตอร์การสืบค้นคุณสามารถจัดหาข้อมูลเส้นทางโดยตรงผ่านพารามิเตอร์การสืบค้น:
GET /rest/documents?path=somepath&page=1&size=42
วิธีการทั้งหมดที่กล่าวมานั้นคาดว่าGET /rest/documents
จะส่งคืนเอกสารแบบรูทเท่านั้น