Chúng tôi có một ứng dụng được chia thành hai phần:REST của URI mẫu cho hoạt động truy vấn và Command
- Admin - Trong trường hợp dữ liệu bị thay đổi
- Công - Trường hợp dữ liệu được đọc
tôi đang xem xét việc tạo một API REST để cung cấp chức năng này. Rất dễ dàng để xem các hoạt động CRUD có thể được biểu diễn như thế nào nhưng tôi không chắc chắn về các hoạt động cụ thể (các lệnh) trên một tài nguyên riêng lẻ. Ví dụ: "Xuất bản" một số Project
, chúng tôi gửi "PublishCommand". Chúng tôi không PUT đầy đủ Project
quay lại máy chủ với thuộc tính Published
được đặt thành true
.
Trên một lưu ý tương tự, tôi hơi bối rối về cách chúng ta nên đại diện cho các hoạt động truy vấn nâng cao hơn trên tài nguyên mà không được phân loại là dịch vụ kiểu RPC.
Dưới đây tôi đã liệt kê các mẫu URI cho tài nguyên Project
của mình. Tôi có đang đi đúng hướng để tạo một API RESTful thực sự không?
ADMIN API
---------
// Project Resources
GET /projects -- get all projects
POST /projects -- create a new project
// Project Resource
GET /projects/10 -- get project with id 10
PUT /projects/10 -- update project with id 10
DELETE /projects/10 -- delete project with id 10
// Project Resource Operations
POST: /projects/10/publish -- publish project with id 10
POST: /projects/10/unpublish -- unpublish project with id 10
POST: /projects/10/setposition/2 -- move to position 2 in projects list
// Project Sub resources (identity is local to project)
POST: /projects/10/media -- adds media to project with id 10
PUT: /projects/10/media/5 -- updates media id 5 for project id 10
DELETE: /projects/10/media/5 -- deletes media id 5 from project id 10
PUBLIC API
----------
GET: /projects -- gets all projects (with default limit e.g. first 10)
GET: /projects?skip=10&take=10 -- gets projects 11 to 20
GET: /projects/tagged/rest OR /taggedprojects/rest -- gets projects tagged with "REST"
GET: /projects?orderbydesc=publishdate OR /latestprojects -- gets latest projects
GET: /projects/10 -- gets project with id 10
Sẽ xem nội dung này. Nhưng hãy nhớ, sử dụng các động từ HTTP để truyền đạt hành động là một phần của REST http://martinfowler.com/articles/richardsonMaturityModel.html – Aliostad
Cảm ơn Dennis. Đây chính là mối quan tâm của tôi - tôi không cần phải thỏa hiệp sự phong phú của mô hình miền của mình để tôi có thể cung cấp một API RESTful để nói chuyện với nó. –
Bạn có thể yêu cầu truy vấn yor bằng cách sử dụng GET, và PUT hoặc POST cho các tài nguyên đại diện cho các lệnh.Điều này sẽ cung cấp sự phong phú của một mô hình miền vượt quá CRUD và vẫn sử dụng ngữ nghĩa vốn có của HTTP. Nhưng tôi biết rằng một số người không chia sẻ ý kiến này. –