Ce qui me vient à l'esprit est: ne laissez pas l'API RESTful refléter la récursivité dans l'URL elle-même. À bien y penser, votre ressource n'est que les documents.
Si vos documents sont stockés physiquement conformément à la structure récursive, créez un mappage vers un ID unique et utilisez l'ID dans l'URL:
/rest/documents/{id}
Maintenant, si vous avez vos documents comme celui-ci:
| DocumentName | DocumentPath | DocumentID |
--------------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| boo | / abc / asd / boo | 4 |
| hé | / abc / asd / hey | 5 |
la demande consulterait cette URL pour le /abc/asd
document
GET /rest/documents/2
Donc, vous devez maintenant fournir aux utilisateurs de votre API les moyens de parcourir votre structure avec peu d'effort. Cela pourrait être fait en enveloppant votre charge utile de réponse (document) dans un objet, contenant des informations de parcours supplémentaires, comme ceci:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
à condition que vous vous attendiez à ce que les utilisateurs ne créent pas trop de documents dans un seul niveau, vous pouvez inclure une liste d'enfants dans la réponse. Si ce n'est pas le cas, vous pouvez proposer à l'utilisateur de récupérer les ID de document enfant de cette manière, en permettant par exemple de paginer les résultats via les paramètres de la chaîne de requête:
GET /rest/documents/2/children?page=2&size=50
Enfin, en parlant des paramètres de la chaîne de requête, vous pouvez également fournir les informations de chemin directement via les paramètres de la chaîne de requête:
GET /rest/documents?path=somepath&page=1&size=42
Toutes les approches mentionnées s'attendent à ce que la plaine GET /rest/documents
renvoie uniquement les documents racine.