Quello che mi viene in mente è: non lasciare che l'API RESTful rifletta la ricorsività nell'URL stesso. Vieni a pensarci bene, la tua risorsa è solo i documenti.
Se i tuoi documenti sono archiviati fisicamente in base alla struttura ricorsiva, crea una mappatura su un ID univoco e utilizza l'ID nell'URL:
/rest/documents/{id}
Ora, se hai i tuoi documenti in questo modo:
| DocumentName | DocumentPath | DocumentID |
--------------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| ciao | / abc / asd / boo | 4 |
| ehi | / abc / asd / hey | 5 |
la richiesta dovrebbe consultare questo URL per il /abc/asd
documento
GET /rest/documents/2
Quindi, ora devi fornire agli utenti della tua API i mezzi per attraversare la tua struttura con poco sforzo. Ciò potrebbe essere fatto avvolgendo il payload di risposta (documento) in un oggetto, contenente ulteriori informazioni di movimento, come questo:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
purché si preveda che gli utenti non creino troppi documenti in un unico livello, è possibile includere un elenco di elementi secondari nella risposta. In caso contrario, potresti offrire all'utente di recuperare gli ID documento figlio in questo modo, consentendo ad esempio di effettuare il paging dei risultati tramite i parametri di querystring:
GET /rest/documents/2/children?page=2&size=50
Infine, parlando di parametri di querystring, potresti anche fornire le informazioni sul percorso direttamente attraverso i parametri di querystring:
GET /rest/documents?path=somepath&page=1&size=42
Tutti gli approcci citati prevedono che la pianura GET /rest/documents
restituisca solo documenti radice.