Nếu bạn đã xóa tài nguyên bằng cách sử dụng DELETE
yêu cầu tiếp theo đối với tài nguyên phải trả về 404 NOT FOUND
hoặc 410 GONE
vì không còn tài nguyên ở đó để chấp nhận yêu cầu.
Nếu được chấp nhận và bạn có trạng thái sẵn có, câu trả lời đơn giản nhất là chỉ cần tạo lại tài nguyên bằng cách phát hành PUT
tại URL của tài nguyên đã bị xóa. Về mặt ngữ nghĩa, điều này tạo ra một tài nguyên mới, thay thế bất kỳ trạng thái hiện có nào, không thực sự hoàn tác việc xóa.
Một giải pháp đơn giản khác là thừa nhận rằng bạn không thực sự xóa tài nguyên và chỉ thay đổi trạng thái của chúng theo cách nào đó để hiển thị chúng được lưu trữ. Điều đó có nghĩa là bạn không thể sử dụng động từ DELETE
nhưng bạn có thể phát ra yêu cầu PUT
hoặc POST
để thay đổi giữa các trạng thái được lưu trữ và hoạt động.
Nếu bạn muốn giữ DELETE
như phương tiện của bạn loại bỏ các hồ sơ, sau đó là một lựa chọn là để làm cho nó có thể truy cập vào một tài nguyên lưu trữ bằng cách sử dụng một show-archived
giá trị đặc biệt:
GET /contacts/<id>?show-archived=true
Xác định này trên một tài nguyên được lưu trữ sẽ trả về một 200
trên tài nguyên được lưu trữ thay vì một trong các mã 40X
. Đó là một chút may mắn, bởi vì tài nguyên của bạn bây giờ có một vấn đề "superstate" xuất hiện cả hai để tồn tại và không tồn tại tùy thuộc vào cách bạn quan sát chúng. Tuy nhiên, điều đó có nghĩa là bạn có thể yêu cầu tài nguyên cập nhật trạng thái của nó:
PUT /contacts/<id>?show-archived=true
State=Active
... all other unchanged fields ...
Nguồn
2013-05-30 11:13:08
+1 - một biến thể nhỏ khác là PATCH vì bạn chỉ cập nhật một phần tài nguyên (trong trường hợp này, trạng thái đã xóa/lưu trữ) – bryanmac
'PATCH' rất phù hợp với loại yêu cầu này, tuy nhiên hỗ trợ cho nó thay đổi; nó khá mới đối với gia đình động từ HTTP. –