2012-05-29 43 views
9

Có rất nhiều cuộc thảo luận về thiết kế REST URI, nhưng không có câu trả lời nào chính xác cho câu hỏi của tôi.Thiết kế REST URI cho cấu trúc cây

Giả sử tôi có một số danh sách chứa các tác vụ và/hoặc danh sách khác (list = node và task = leaf).

Chúng ta có thể có cái gì đó như

/lists/{id_list1}/lists/{id_list2}/lists/{id_list3}/tasks/{id_task1} 

hoặc có thể là một phiên bản ngắn hơn:

/lists/{id_list1}/{id_list2}/{id_list3}/{id_task1} 

Nhưng những gì về cây thực sự sâu?

Tôi cũng đã suy nghĩ về mối quan hệ cha/con mà có thể được dịch như

/lists/{id_list_parent}/{id_list_or_task_child} 

nhưng tôi cảm thấy như một cái gì đó còn thiếu ...

Điều gì sẽ là một thiết kế thông minh cho cây REST của URI?

EDIT

Xin lỗi vì câu trả lời muộn của tôi!

Vì vậy, tôi nghĩ rằng tôi đang trộn 2 nhu cầu: URI API và URI trình duyệt.

Đây là cách tôi nhìn thấy điều:

Về phía API, tôi sẽ chỉ có những URI cho cả ghi và đọc các phương pháp (các '/ id' ở cuối là không cần thiết, cho tạo ví dụ) :

/lists/id 
/tasks/id 

Mở trình duyệt của tôi tuy nhiên, tôi sẽ có một cái gì đó như thế này:

/lists/id/lists/id/tasks/ 

Chỉ có phần đầu tiên (/ danh sách/id) sẽ được giải thích bởi các máy chủ, phần thứ hai (danh sách/id/tasks /) wi sẽ được sử dụng bởi javascript phía máy khách của tôi để tìm các nhiệm vụ của danh sách phụ của danh sách nhận được từ máy chủ.

Bạn nghĩ gì về phương pháp này, có điều gì đó cảm thấy sai trong đó không?

+0

Hãy xem url trên Git Hub https://github.com/twitter/bootstrap/tree/master/docs/templates thư mục là các nút và tệp là các lá. Tôi nghĩ rằng nó hoạt động tốt! –

+1

URI không phải là một phần của API REST. REST là về nội dung chứ không phải URI. Điều này sẽ cho phép bạn tự do chọn một tổ chức URI và thay đổi nó sau này. Dù sao: tại sao bạn cần/danh sách/{id_list1}/danh sách/{id_list2}/danh sách/{id_list3}/tasks/{id_task1}? Điều này dường như dẫn đến nhiệm vụ với id 3, do đó, điều này không thể được giảm xuống/lists/{id_list3}/tasks để có danh sách nhiệm vụ và/tasks/{id_task1} cho tác vụ trong danh sách? – jmclem

+0

Cảm ơn bạn đã trả lời nhưng câu hỏi của tôi không chính xác, hãy xem chỉnh sửa của tôi ở trên. – greg3z

Trả lời

0

Sử dụng URI để thực thi ràng buộc này dường như không chính xác. Tôi sẽ chấp nhận một yêu cầu PUT có một số loại tải trọng (JSON, XML, v.v.).

PUT /tasklist

lists: [{ 
    id: 1234, 
    id: 12345, 
    tasks: [{ 
     id: foo, 
     id: bar, 
     id: baz 
    }] 
}] 

URL dường như chỉ ra rằng bạn đang cố gắng làm quá nhiều ở đây (IMHO). Thông thường, bạn sẽ tương tác với một tài nguyên duy nhất, trong khi trường hợp sử dụng của bạn ngụ ý rằng bạn đang hoạt động trên một số tài nguyên theo ngữ cảnh cùng một lúc.

10

Có cần phải đại diện cho cây thông qua các URI không? Khi họ có thể chỉ đơn giản là tham chiếu đến các nút chính họ và các mối quan hệ được mô hình hóa thông qua các liên kết trong loại siêu văn bản.

Khác hơn thế, tôi nghĩ rằng một cái gì đó như:

/lists/{nodeId}/children 

và nó có thể trả về một danh sách các trẻ em trực tiếp cho phụ huynh.

Bạn cũng có thể làm điều gì đó như:

/lists/{nodeId}/children?depth=3 

và trả lại ba cấp độ tiếp theo của cây trong kết quả của bạn.

/lists/{nodeId}/children?depth=infinite 

có thể trả lại toàn bộ chi nhánh từ nút đó.

Các vấn đề liên quan