Co przychodzi mi do głowy: nie pozwól, aby interfejs API RESTful odzwierciedlał rekurencyjność samego adresu URL. Pomyśl o tym, twój zasób to tylko dokumenty.
Jeśli Twoje dokumenty są przechowywane fizycznie zgodnie ze strukturą rekurencyjną, utwórz mapowanie na unikalny identyfikator i użyj identyfikatora w adresie URL:
/rest/documents/{id}
Teraz, jeśli masz takie dokumenty:
| Nazwa dokumentu | DocumentPath | DocumentID |
--------------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| boo | / abc / asd / boo | 4 |
| hej | / abc / asd / hey | 5 |
wniosek sprawdzi ten adres URL /abc/asd
dokumentu
GET /rest/documents/2
Tak więc teraz musisz zapewnić użytkownikom interfejsu API środki do przemierzania swojej struktury przy niewielkim wysiłku. Można to zrobić poprzez zawinięcie ładunku odpowiedzi (dokumentu) w obiekt zawierający dodatkowe informacje o przechodzeniu, takie jak to:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
pod warunkiem, że oczekujesz, że użytkownicy nie będą tworzyć zbyt wielu dokumentów na jednym poziomie, możesz dołączyć do odpowiedzi listę dzieci. Jeśli tak nie jest, możesz zaoferować użytkownikowi pobranie takich identyfikatorów dokumentów podrzędnych, umożliwiając np. Stronicowanie wyników za pomocą parametrów zapytania:
GET /rest/documents/2/children?page=2&size=50
Wreszcie, mówiąc o parametrach zapytania, możesz również podać informacje o ścieżce bezpośrednio przez parametry zapytania:
GET /rest/documents?path=somepath&page=1&size=42
Wszystkie wymienione podejścia oczekują, że zwykły GET /rest/documents
zwraca tylko dokumenty root.