Phương pháp HTTP phù hợp để nâng cấp là gì?


8

Từ quan điểm RESTful , phương thức HTTP thích hợp nhất cho hành động nâng cấp bài đăng trên diễn đàn (như trên StackExchange) là gì?

Tôi có thể nói POST để bỏ phiếu và DELETE cho hủy bỏ phiếu, nhưng vì người dùng chỉ được phép bỏ một phiếu cho mỗi tin nhắn, bỏ phiếu có thể được coi là một idempotent hoạt động để PUT cũng có thể thực hiện được.

Câu trả lời:


6

PUT / bài viết / 323223 / phiếu

Một cuộc bỏ phiếu có thể được xem là một nguồn tài nguyên mà tôi sẽ thử. Tôi sẽ không thực hiện bất kỳ hành động nào đối với bài đăng (/ bài viết / 323223) vì đó là một tài nguyên khác. Sau đó, bạn sẽ cần phải có một phương pháp bổ sung và nó bắt đầu trở nên phức tạp.


7

Tôi sẽ tranh luận bạn PUTbỏ phiếu của bạn, hoặc DELETEnó. Bạn không thực sự chỉnh sửa bài đăng trên diễn đàn, vì vậy POSTsẽ không phù hợp.


1

Nó chủ yếu phụ thuộc vào những gì bạn coi là đối tượng mục tiêu thực tế của bạn .

Nếu đối tượng mục tiêu của bạn là phiếu bầu , thì có lẽ bạn nên ĐĂNG phiếu bầu cho hệ thống vì bạn thực sự đang thay đổi trạng thái của đối tượng mục tiêu (bộ đếm phiếu nội bộ của nó).

Mặc dù vậy, nhiều khả năng là bạn coi bài đăng trên diễn đàn là đối tượng mục tiêu của hoạt động của mình và trong trường hợp này, rất có thể bộ thao tác PUT / DELETE phù hợp hơn với phương pháp luận của REST vì bạn không thay đổi / chỉnh sửa bài viết diễn đàn của bạn. Bạn chỉ cần đặt / xóa mã thông báo vào một quầy. Vì vậy, tôi sẽ ủng hộ đề nghị của Vain Fellowman.

Thực tế rằng bỏ phiếu nên là một hoạt động bình thường là một đầu mối khác sẽ dẫn bạn theo hướng này. Hãy nghĩ rằng đây là một hoạt động THÊM / XÓA trên biến thành viên "bỏ phiếu" của lớp / đối tượng "forumPost" của bạn.

Về cách nhận biết đối tượng mục tiêu thực sự của bạn là bài đăng trên diễn đàn hay phiếu bầu, tôi nghĩ bạn nên xem mã của mình. "Đối tượng" (có thể là trang JSP + Trình điều khiển Java + một số Thực thể Java đề cập đến một số bảng DB) nhận và xử lý yêu cầu HTTP này đại diện cho một bài đăng trên diễn đàn hoặc bỏ phiếu?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.