Що мені спадає на думку: не дозволяйте RESTful API відображати рекурсивність у самій URL-адресі. Подумайте, ваш ресурс - лише документи.
Якщо у вас зберігаються документи фізично відповідно до рекурсивної структури, створіть відображення унікального ідентифікатора та використовуйте ідентифікатор у URL-адресі:
/rest/documents/{id}
Тепер, якщо у вас є такі документи:
| Назва документа | 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} ]
}
за умови, що ви очікуєте, що користувачі не створюватимуть занадто багато документів на одному рівні, ви можете включити у відповідь список дітей. Якщо це не так, ви можете запропонувати користувачеві отримати такі ідентифікатори дочірнього документа, як, наприклад, для підкачки результатів через параметри запиту:
GET /rest/documents/2/children?page=2&size=50
Нарешті, кажучи про параметри запитів, ви також можете подавати інформацію про шлях безпосередньо через параметри запиту:
GET /rest/documents?path=somepath&page=1&size=42
Усі згадані підходи очікують, що звичайна GET /rest/documents
повертає лише кореневі документи.