2012-11-04 69 views
5

Giả sử tôi có tài nguyên có tên là "Phiên". Khách hàng sẽ gọi PUT để tạo và bắt đầu một phiên mới. Khi khách hàng kết thúc phiên, nó sẽ không còn có thể truy cập được nữa, nhưng vẫn tồn tại vì lý do lịch sử/trách nhiệm.Phương thức HTTP: DELETE so với POST

Để kết thúc phiên, sẽ thích hợp hơn khi đưa ra yêu cầu DELETE, dường như ngữ nghĩa gần hơn với hiệu ứng mong muốn hoặc POST, vì tài nguyên không thực sự bị xóa vĩnh viễn?

Trả lời

5

Câu hỏi ở đây là: Yêu cầu idempotent? Nếu bạn thực hiện cùng một yêu cầu hai lần, nó có tác dụng phụ không? Giống như khi bạn đặt hàng một bài viết, thực hiện yêu cầu đặt hàng hai lần sẽ giúp bạn có được bài viết hai lần.

Trong trường hợp đó, POST là phương pháp bạn muốn. Nếu không, bạn muốn hoặc là PUT hoặc DELETE.

Vì bạn dường như không xóa phiên, chỉ thay đổi trạng thái của nó, PUT sẽ là một phương pháp tốt hơn, vì điều đó có nghĩa là tài nguyên bị thay đổi và không bị xóa, trong trường hợp của bạn.

Edit:

Nếu tài nguyên dường như bị xóa từ các khách hàng, DELETE dường như thích hợp hơn. Làm thế nào mọi thứ được thực hiện ở phía sau không quan trọng cho khách hàng.

+0

Điều gì sẽ xảy ra nếu tài nguyên "xuất hiện" bị xóa khỏi quan điểm của khách hàng? Trong ví dụ của tôi, yêu cầu sẽ là idempotent, bởi vì gọi nó lần thứ hai sẽ không có bất kỳ tác dụng phụ và phát hành một yêu cầu GET trên phiên sẽ thất bại. –

0

Yêu cầu POST sẽ tốt hơn ở đây vì bạn không thực sự xóa session. Các yêu cầu POST thường được sử dụng để thay đổi trạng thái của một đối tượng. Đó là trường hợp của bạn tôi nghĩ.

Các vấn đề liên quan