Was mir in den Sinn kommt, ist: Lassen Sie Ihre RESTful-API nicht die Rekursivität in der URL selbst widerspiegeln. Denken Sie mal darüber nach, Ihre Ressource sind nur die Dokumente.
Wenn Sie Ihre Dokumente gemäß der rekursiven Struktur physisch gespeichert haben, erstellen Sie eine Zuordnung zu einer eindeutigen ID und verwenden Sie die ID in der URL:
/rest/documents/{id}
Wenn Sie Ihre Dokumente wie folgt haben:
| Dokumentname | DocumentPath | DocumentID |
----------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| boo | / abc / asd / boo | 4 |
| hey | / abc / asd / hey | 5 |
Die Anfrage würde diese URL für ein /abc/asd
Dokument konsultieren
GET /rest/documents/2
Jetzt müssen Sie den Benutzern Ihrer API die Möglichkeit geben, Ihre Struktur mit geringem Aufwand zu durchlaufen. Dies kann erreicht werden, indem Sie Ihre Antwortnutzlast (Dokument) in ein Objekt einwickeln, das zusätzliche Durchquerungsinformationen enthält, wie folgt:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
Vorausgesetzt, Sie erwarten, dass Benutzer nicht zu viele Dokumente auf einer Ebene erstellen, können Sie eine Liste der untergeordneten Elemente in die Antwort aufnehmen. Wenn dies nicht der Fall ist, können Sie dem Benutzer anbieten, untergeordnete Dokument-IDs wie diese abzurufen, um beispielsweise die Ergebnisse über Querystring-Parameter zu pagen:
GET /rest/documents/2/children?page=2&size=50
Wenn Sie von Querystring-Parametern sprechen, können Sie die Pfadinformationen auch direkt über die Querystring-Parameter bereitstellen:
GET /rest/documents?path=somepath&page=1&size=42
Alle genannten Ansätze erwarten, dass die Ebene GET /rest/documents
nur Stammdokumente zurückgibt.