Điều tôi nghĩ đến là: đừng để API RESTful phản ánh tính đệ quy trong chính URL. Hãy nghĩ về nó, tài nguyên của bạn chỉ là các tài liệu.
Nếu bạn có tài liệu của mình được lưu trữ theo cấu trúc đệ quy, hãy tạo ánh xạ tới một ID duy nhất và sử dụng ID trong URL:
/rest/documents/{id}
Bây giờ, nếu bạn có tài liệu của bạn như thế này:
| Tên tài liệu | Tài liệuPath | Tài liệuID |
--------------------------------------------
| abc | / abc | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| boo | / abc / asd / boo | 4 |
| này | / abc / asd / hey | 5 |
yêu cầu sẽ tham khảo url này cho /abc/asd
tài liệu
GET /rest/documents/2
Vì vậy, bây giờ bạn phải cung cấp cho người dùng API phương tiện để vượt qua cấu trúc của bạn với ít nỗ lực. Điều đó có thể được thực hiện bằng cách gói tải trọng phản hồi (tài liệu) của bạn vào một đối tượng, chứa thông tin truyền tải bổ sung, như sau:
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
với điều kiện bạn mong muốn người dùng không tạo quá nhiều tài liệu ở một cấp độ, bạn có thể đưa danh sách trẻ em vào phản hồi. Nếu đó không phải là trường hợp bạn có thể cung cấp cho người dùng để lấy ID tài liệu con như vậy, cho phép ví dụ để phân trang kết quả thông qua các tham số chuỗi truy vấn:
GET /rest/documents/2/children?page=2&size=50
Cuối cùng, nói về các tham số chuỗi truy vấn, bạn cũng có thể cung cấp thông tin đường dẫn trực tiếp thông qua các tham số chuỗi truy vấn:
GET /rest/documents?path=somepath&page=1&size=42
Tất cả các cách tiếp cận được đề cập đều mong đợi rằng đồng bằng GET /rest/documents
chỉ trả về các tài liệu gốc.