O que me vem à mente é: não permita que a API RESTful reflita a recursividade no próprio URL. Venha para pensar sobre isso, seu recurso é apenas os documentos.
Se você tiver seus documentos armazenados fisicamente de acordo com a estrutura recursiva, crie um mapeamento para um ID exclusivo e use o ID no URL:
/rest/documents/{id}
Agora, se você possui seus documentos como este:
| DocumentName | DocumentPath | DocumentID |
--------------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2
| asd | / asd | 3
| vaia | / abc / asd / boo | 4
| ei / abc / asd / ei | 5
a solicitação consultaria esse URL para obter o /abc/asd
documento
GET /rest/documents/2
Portanto, agora você precisa fornecer aos usuários da sua API meios para percorrer sua estrutura com pouco esforço. Isso pode ser feito envolvendo sua carga útil de resposta (documento) em um objeto, contendo informações adicionais de travessia, como esta:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
desde que você espere que os usuários não criem muitos documentos em um único nível, inclua uma lista de filhos na resposta. Se não for esse o caso, você poderá oferecer ao usuário a recuperação de IDs de documentos filhos, permitindo, por exemplo, a paginação dos resultados por meio de parâmetros da string de consulta:
GET /rest/documents/2/children?page=2&size=50
Por fim, falando dos parâmetros da string de consulta, você também pode fornecer as informações do caminho diretamente através dos parâmetros da string de consulta:
GET /rest/documents?path=somepath&page=1&size=42
Todas as abordagens mencionadas esperam que a planície GET /rest/documents
retorne apenas documentos raiz.