2011-12-14 29 views

Trả lời

13

Cả POST và PUT đều có thể được sử dụng để tạo và cập nhật các hoạt động trong các tình huống khác nhau. Vì vậy, những gì chính xác là sự khác biệt giữa PUT và POST? Tóm lại: hãy sử dụng PUT nếu và chỉ khi bạn biết cả URL nơi tài nguyên sẽ hoạt động và toàn bộ nội dung của tài nguyên. Nếu không, hãy sử dụng POST.

BÀI ĐĂNG là một động từ vô cùng chung chung. Bởi vì nó hứa hẹn không an toàn cũng không phải là tính không đáng tin cậy, và nó có một mô tả tương đối lỏng lẻo trong RFC, bạn có thể sử dụng nó cho khá nhiều thứ. Trong thực tế, bạn có thể thực hiện tất cả yêu cầu POST của bạn vì POST thực hiện rất ít lời hứa; nó có thể hoạt động như GET, PUT hoặc DELETE nếu nó muốn. Nó cũng có thể làm một số điều mà không có động từ nào khác có thể làm được - nó có thể tạo một tài nguyên mới tại một URL khác với URL trong yêu cầu HTTP; và nó có thể sửa đổi một phần của tài nguyên mà không thay đổi toàn bộ điều (mặc dù phương pháp PATCH được đề xuất nhưng không được chấp nhận rộng rãi có thể làm điều tương tự).

PUT là động từ hạn chế hơn nhiều. Nó lấy một tài nguyên hoàn chỉnh và lưu trữ nó tại URL đã cho. Nếu có tài nguyên ở đó trước đó, nó được thay thế; nếu không, một cái mới được tạo ra. Các thuộc tính này hỗ trợ tính ngẫu nhiên, mà một hoạt động tạo hoặc cập nhật ngây thơ có thể không. Tôi nghi ngờ đây có thể là lý do tại sao PUT được định nghĩa theo cách của nó; nó là một hoạt động không cần thiết cho phép khách hàng gửi thông tin đến máy chủ.

Tài liệu tham khảo:

  • RFC 2616 - HTTP 1.1
  • RFC 5789 - Phương pháp PATCH cho HTTP
  • Martin Fowler, các Richardson Maturity Model
+1

Đây là một mở rộng khá tốt về những gì bạn đang nói: [PUT hoặc POST phần còn lại của câu chuyện] (http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest -của câu chuyện/). –

1

Bạn có thể gửi các yêu cầu cơ thể cùng một cách, nó chỉ là xử lý khác nhau của mã ứng dụng của bạn ...

Các POST động từ theo truyền thống được sử dụng để tạo ra một nguồn lực

Các PUT động từ thường được sử dụng để cập nhật tài nguyên

+1

Thú vị, tôi đã đọc POST được sử dụng để cập nhật và PUT được sử dụng để tạo, như trong câu trả lời được chấp nhận ở đây http://stackoverflow.com/questions/630453/put-vs-post-in-rest – DexCurl

+1

Nó thực sự là một câu hỏi về quy ước chứ không phải là tiêu chuẩn, và tôi sẽ không dựa vào việc tìm kiếm một câu trả lời "được chấp nhận" ở đây như là bằng chứng cụ thể của ** bất cứ điều gì ** ... http://stackoverflow.com/a/2447740/555384. .. Nếu tôi là bạn tôi sẽ nghiên cứu một số apis Restful phổ biến và xem cách họ làm điều đó ... Tôi nghĩ bạn sẽ tìm thấy câu trả lời này được chấp nhận phổ biến nhất. – jondavidjohn

2

Từ quan điểm của HTTP, định dạng yêu cầu giống nhau.

0

PUT tải lên một tài nguyên mới về máy chủ. Nếu tài nguyên đã tồn tại và khác, nó được thay thế; nếu nó không tồn tại, nó được tạo ra.

POST kích hoạt một hành động trên máy chủ. Nó có tác dụng phụ và có thể được sử dụng để kích hoạt một đơn đặt hàng, sửa đổi cơ sở dữ liệu, đăng thông báo trong diễn đàn hoặc các hành động khác.

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