2012-05-24 20 views
7

Ví dụ: nếu tôi gọi GET để nhận một mục, hãy xóa mục đó bằng DELETE và GET lại, cách GET thứ hai hoạt động như thế nào?Làm cách nào để xử lý dữ liệu cũ trong REST?

Ý tôi là, bằng cách tuân thủ chính xác nguyên tắc REST, phương pháp tiếp cận đúng khi thực hiện điều này là gì vì GET có thể được lưu trong bộ nhớ cache và tất cả? Cách tiếp cận để xử lý dữ liệu cũ trong REST là gì?

+0

Nếu bạn vừa xóa mục, tại sao bạn lại cố gắng "lấy lại" nó? Nó sẽ không tồn tại. Có lẽ tôi đang thiếu một cái gì đó hoặc câu hỏi không rõ ràng. –

+0

@Brent Pabst: Xem xét các liên kết ví dụ trong ứng dụng giao diện người dùng trong đó xóa xảy ra trong cửa sổ bật lên nhưng liên kết GET nằm trong trang mở và không được cập nhật hoặc chuyển bằng thư và người dùng chèn chúng vào thanh địa chỉ trình duyệt ngay giữa xóa vv Điều này là tùy thuộc vào bộ nhớ cache! Ý tưởng là, nếu mặt hàng đó không còn nữa thì GET nên hoạt động như thế nào. Vô hiệu hóa TẤT CẢ bộ nhớ cache? Có thể chấp nhận một số bộ nhớ cache không? Cách tiếp cận REST cho tất cả điều này là gì? – JohnDoDo

+2

GET thứ hai sẽ tự nhiên trả về mã HTTP '404 Not Found'. Caching là một vấn đề khác mà tôi sẽ cung cấp câu trả lời kỳ diệu mờ đục: "nó phụ thuộc". Nhưng nếu có * là * một GET thứ hai, có vẻ như khá rõ ràng rằng nó sẽ sản xuất một 404? –

Trả lời

4

Trước hết, hành vi phụ thuộc vào lệnh gọi DELETE được trả về làm mã phản hồi của nó.

Nếu DELETE trả lại 200 - OK hoặc 204 - No Content thì khách hàng sẽ nhận được 404 - Not Found trong lần gọi tiếp theo để nhận được GET. Đó là vì 202 và 204 có nghĩa là tài nguyên đã bị xóa ngay lập tức.

Tuy nhiên nếu DELETE trả về 202 - Accepted, có khả năng khách hàng sẽ có thể GET thành công tài nguyên trong một thời gian sau đó. Đó là bởi vì 202 có nghĩa là tài nguyên đã được đánh dấu để xóa, nhưng không nhất thiết phải làm sạch ngay lập tức.

Thứ hai, nếu có bộ nhớ cache liên quan, hành vi phải được xây dựng để phù hợp với những gì sẽ xảy ra nếu không có bộ nhớ cache. DELETE thành công sẽ luôn dẫn đến việc xóa cả hai khỏi nguồn gốc thực của dữ liệu ngoài các bản sao được lưu trong bộ nhớ cache.

0

Như đã nêu ban đầu, GET sau DELETE sẽ tạo ra lỗi HTTP 404 không phụ thuộc vào bộ nhớ đệm có thể có. Mã logic phải đủ thông minh để xóa bản ghi khỏi kho lưu trữ liên tục cũng như bộ nhớ trong hoặc bộ nhớ trong. Ngoài ra, giao diện người dùng sẽ có thể xử lý kết quả của 404 với bất kỳ luồng hoặc quy trình nào bạn cho là phù hợp.