Tôi có một thực thể với một số thuộc tính, nói «project». Ngoài các thuộc tính đơn giản, dự án có thể có một danh sách «trạng thái» mà cái cuối cùng là thuộc tính hiện tại. Tôi có một biểu mẫu web để tạo/chỉnh sửa dự án. Tất cả các thuộc tính của dự án này có thể được thay đổi trong biểu mẫu này và người dùng cũng có thể thêm trạng thái mới cho dự án (nhưng họ không thể thay đổi hoặc xóa trạng thái cũ).Cập nhật các đối tượng kết hợp trong tài nguyên RESTful
Trạng thái dự án hoàn toàn là các đối tượng hỗn hợp, không có bất kỳ ý nghĩa hay nhận dạng đặc biệt nào ngoài phạm vi dự án và chúng không được giải quyết trực tiếp, vì vậy chúng rõ ràng không xứng đáng với tài nguyên REST đặc biệt gốc.
Theo kiến trúc REST, tôi đã tạo tài nguyên được gọi là/projects. POST được sử dụng để tạo một dự án mới, và PUT được sử dụng để thay đổi một dự án hiện có.
Tuy nhiên, tôi không muốn khách hàng PUT dự án cùng với tất cả trạng thái lịch sử, trước hết vì bộ sưu tập này quá nặng và thứ hai vì logic nghiệp vụ chỉ cho phép thêm trạng thái chứ không thay đổi hoặc xóa chúng nên PUTting dự án cùng với tất cả các trạng thái của nó không có bất kỳ ý nghĩa nào.
Ngắt một dự án chỉ với một trạng thái mới cũng không phải là một tùy chọn, vì nó vi phạm tính ngẫu nhiên của PUT.
Tôi cũng không thích ý tưởng BẬT trạng thái trong yêu cầu HTTP thứ hai, nói/project/{id}/status, vì điều đó sẽ phá vỡ tính nguyên tử của hoạt động cập nhật từ quan điểm của người dùng. Nếu yêu cầu thứ hai này bị mất trên dây, thì dự án sẽ xuất hiện không phù hợp với người dùng đã chỉnh sửa nó (các thuộc tính đã thay đổi, nhưng trạng thái vẫn giữ nguyên). Tạo các giao dịch RESTful "" có vẻ như quá mức cần thiết (và cũng dễ bị lỗi) cho nhiệm vụ đơn giản này là cập nhật một thực thể dường như nguyên khối.
Loại sự cố này khá phổ biến trong công việc của tôi và có thể được khái quát hóa như vậy: cách chính xác và nguyên tử của cách cập nhật một thực thể phức hợp phức tạp mà chỉ cho phép cập nhật một phần bởi logic nghiệp vụ?
Wow. Tôi không biết về RFC này. Cảm ơn! –
Bạn được chào đón! Rất vui khi biết rằng điều này giúp bạn! –