Lo que me viene a la mente es: no permita que la API RESTful refleje la recursividad en la propia URL. Ahora que lo pienso, su recurso son solo los documentos.
Si tiene sus documentos almacenados físicamente de acuerdo con la estructura recursiva, cree una asignación a una ID única y use la ID en la URL:
/rest/documents/{id}
Ahora, si tienes tus documentos así:
El | DocumentName | DocumentPath | DocumentID |
--------------------------------------------
El | abc | / abc | 1 |
El | asd | / abc / asd | 2 |
El | asd | / asd | 3 |
El | boo | / abc / asd / boo | 4 |
El | hey | / abc / asd / hey | 5 |
la solicitud consultaría esta url para el /abc/asddocumento
GET /rest/documents/2
Por lo tanto, ahora debe proporcionar a los usuarios de su API medios para atravesar su estructura con poco esfuerzo. Eso podría hacerse envolviendo su carga útil de respuesta (documento) en un objeto, que contiene información transversal adicional, como esta:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
siempre que espere que los usuarios no creen demasiados documentos en un solo nivel, puede incluir una lista de niños en la respuesta. Si ese no es el caso, podría ofrecerle al usuario que recupere las identificaciones de documentos secundarios de esta manera, permitiendo, por ejemplo, paginar los resultados a través de parámetros de cadena de consulta:
GET /rest/documents/2/children?page=2&size=50
Finalmente, hablando de los parámetros de la cadena de consulta, también puede proporcionar la información de ruta directamente a través de los parámetros de la cadena de consulta:
GET /rest/documents?path=somepath&page=1&size=42
Todos los enfoques mencionados esperan que el plano GET /rest/documentsdevuelva solo documentos raíz.