Giả sử tôi muốn tạo giao diện RESTful và tôi muốn làm việc với foo
s dựa trên ID của chúng. Không có gì mới ở đây:Thực hành tốt nhất để trả về đại diện của tài nguyên cũng là một bộ sưu tập
GET /api/foo1
trả về đại diện (ví dụ: sử dụng JSON)foo1
.DELETE /api/foo1
xóafoo1
.
, vv
Bây giờ hãy để tôi nói với bạn rằng một "foo" là một loại bộ sưu tập điều. Vì vậy, tôi muốn có thể để thêm một "thanh" tới "foo":
PUT /api/foo1/bar3
thêmbar3
đểfoo1
.GET /api/foo1/bar3
trả về đại diện củafoo1
.DELETE /api/foo1/bar3
loại bỏbar3
từfoo1
.DELETE /api/foo1
xóa hoàn toànfoo1
hoàn toàn.
Bây giờ câu hỏi vẫn còn: GET /api/foo1
làm gì? Nó có đơn giản là trả lại một biểu diễn của foo1
như tôi đã giả định ban đầu trong câu hỏi này không? Hay nó trả về một danh sách các quán bar? Hoặc nó có trả về một đại diện của foo1
mà cả hai mô tả của foo1
cũng như bao gồm một danh sách tất cả các thanh chứa?
Hoặc nên GET /api/foo1
chỉ đơn thuần là trả lại một đại diện của foo1
như tôi cho rằng ngay từ đầu, và đòi hỏi một yêu cầu PROPFIND
để liệt kê các thanh bên foo1
(phương pháp chụp bởi WebDAV)? Nhưng sau đó để nhất quán, tôi sẽ không phải thay đổi tất cả chức năng kiểu danh sách khác của mình thành PROPFIND
, trực tiếp mâu thuẫn với tất cả hàng nghìn hướng dẫn RESTful đó có sử dụng GET /api/foo1
để liệt kê nội dung không?
Tôi thích cách tiếp cận của bạn. Trong thực tế, nó là hành vi tương tự mà thực sự phản đối ngôn ngữ định hướng thực hiện cho mảng hoặc danh sách các đối tượng: thuộc tính đối tượng Array: Chiều dài, Kích thước, ReadOnly Mảng phương pháp GetValue - trả về một mục thuộc tính đối tượng liệt kê: Trưởng, hiện tại Phương thức danh sách GetEnumerator - trả về một đối tượng mà lần lượt sẽ trả về các mục –