PUT và POST – Sự khác biệt giữa chúng
Sự khác biệt chính giữa PUT và POST
- Phương thức PUT được gọi khi bạn phải sửa đổi một tài nguyên, trong khi phương thức POST được gọi khi bạn phải thêm một tài nguyên con.
- Phản hồi của phương thức POST có thể được lưu vào bộ nhớ đệm nhưng bạn không thể lưu vào bộ nhớ đệm các phản hồi của phương thức PUT.
- Bạn có thể sử dụng truy vấn CẬP NHẬT trong PUT, trong khi bạn có thể sử dụng truy vấn tạo trong POST.
- Trong phương thức PUT, máy khách quyết định tài nguyên URI nào nên có và trong phương thức POST, máy chủ quyết định tài nguyên URI nào nên có.
- PUT hoạt động cụ thể, trong khi POST hoạt động trừu tượng.
- Nếu bạn gửi cùng một yêu cầu PUT nhiều lần thì kết quả sẽ giữ nguyên, nhưng nếu bạn gửi cùng một yêu cầu POST nhiều lần thì bạn sẽ nhận được các kết quả khác nhau.
- Phương thức PUT là bình thường, trong khi phương thức POST không bình thường.

Phương pháp PUT là gì?
Phương thức PUT được sử dụng để cập nhật tài nguyên có sẵn trên máy chủ. Thông thường, nó thay thế bất cứ thứ gì tồn tại ở URL mục tiêu bằng một thứ khác. Bạn có thể sử dụng nó để tạo tài nguyên mới hoặc ghi đè lên tài nguyên hiện có. PUT yêu cầu thực thể kèm theo phải được lưu trữ theo URI được yêu cầu (Mã định danh tài nguyên thống nhất) được cung cấp.
Phương thức POST là gì?
POST là một phương thức được hỗ trợ bởi HTTP và
mô tả rằng máy chủ web chấp nhận dữ liệu có trong nội dung thư được yêu cầu. POST thường được World Wide Web sử dụng để gửi dữ liệu do người dùng tạo đến máy chủ web hoặc khi bạn tải tệp lên.
Sự khác biệt giữa PUT và POST trong API REST
Đây là sự khác biệt quan trọng giữa phương thức PUT và POST:
PUT | POST |
---|---|
Phương pháp này là bình thường. | Phương pháp này không bình thường. |
Phương thức PUT được gọi khi bạn phải sửa đổi một tài nguyên đã là một phần của bộ sưu tập tài nguyên. | Phương thức POST được gọi khi bạn phải thêm tài nguyên con vào bộ sưu tập tài nguyên. |
RFC-2616 mô tả rằng phương thức PUT gửi yêu cầu cho một thực thể kèm theo được lưu trữ trong URI yêu cầu được cung cấp. | Phương thức này yêu cầu máy chủ chấp nhận thực thể được đính kèm trong yêu cầu. |
Cú pháp của phương thức PUT là PUT /questions/{question-id} | Cú pháp của phương thức POST là POST /questions |
Bạn không thể lưu trữ các phản hồi của phương thức PUT. | Câu trả lời của phương thức POST có thể được lưu vào bộ nhớ đệm. |
PUT /vi/juice/orders/1234 cho biết rằng bạn đang cập nhật tài nguyên được xác định bằng “1234”. | POST /vi/juice/orders cho biết rằng bạn đang tạo một tài nguyên mới và trả về một mã định danh để mô tả tài nguyên đó. |
Nếu bạn gửi cùng một yêu cầu nhiều lần thì kết quả sẽ giữ nguyên. | Nếu bạn gửi cùng một yêu cầu POST nhiều lần, bạn sẽ nhận được các kết quả khác nhau. |
PUT hoạt động cụ thể. | POST hoạt động như trừu tượng. |
Chúng tôi sử dụng truy vấn CẬP NHẬT trong PUT. | Chúng tôi sử dụng truy vấn tạo trong POST. |
Trong phương thức PUT, máy khách quyết định tài nguyên URI nào sẽ có. | Trong phương thức POST, máy chủ quyết định tài nguyên URI nào sẽ có. |
Ví dụ về PUT
Đây là ví dụ về máy chủ web của phương thức PUT:
HTTP PUT http://www.google.com/users/234
HTTP PUT http://www.google.com/users/234/accounts/567
Yêu cầu
PUT /new.html HTTP/1.1 Host: example.com Content-type: text/html Content-length: 20 <p>New File</p>
Câu trả lời
Nếu tài nguyên đích có biểu diễn hiện tại và được sửa đổi theo trạng thái của biểu diễn kèm theo thì máy chủ sẽ gửi hai phản hồi. Mã phản hồi đầu tiên là 200 (OK) và mã phản hồi thứ hai là 204 (Không có nội dung).
Nếu tài nguyên đích không có bất kỳ đại diện nào thì máy chủ sẽ thông báo cho người dùng bằng cách gửi phản hồi mã 201 (Đã tạo).
HTTP/1.1 201 Created Content-Location: /new.html
Ví dụ về BÀI ĐĂNG
Đây là một ví dụ về phương thức POST:
BÀI ĐĂNG HTTP http://www.google.com/users
BÀI ĐĂNG HTTP http://www.google.com/users/234/accounts
Một biểu mẫu sử dụng loại nội dung mặc định là ứng dụng/x-www-form-urlencoded:
POST /test HTTP/1.1 Host: abc.example Content-Type: application/x-www-form-urlencoded Content-Length: 40 field1=value1&field2=value2
Kiểm tra API với các yêu cầu PUT
Dưới đây là các bước để kiểm tra API với yêu cầu PUT:
Bước 1) Cập nhật tài nguyên với yêu cầu PUT.
Bước 2) Sử dụng phương thức GET cho tài nguyên. Nếu yêu cầu PUT thành công, bạn sẽ nhận được dữ liệu mới. Phương pháp này sẽ thất bại nếu dữ liệu được cung cấp trong yêu cầu không hợp lệ. Vì vậy, nó sẽ không cập nhật bất cứ điều gì.
Kiểm tra API với các yêu cầu POST
Dưới đây là các bước để kiểm tra API với yêu cầu POST:
Bước 1) Tạo tài nguyên bằng yêu cầu POST và đảm bảo rằng nó trả về 200 mã trạng thái.
Bước 2) Thực hiện yêu cầu GET cho tài nguyên đó và lưu dữ liệu theo đúng định dạng.
Bước 3) Bạn phải thêm các bài kiểm tra để đảm bảo các yêu cầu POST không thành công với dữ liệu không chính xác.
Ưu điểm của phương pháp PUT
Dưới đây là những ưu/lợi ích của việc sử dụng phương pháp PUT:
- Nó giúp bạn lưu trữ thực thể được cung cấp theo URI được cung cấp
- Nếu thực thể được cung cấp đã tồn tại thì bạn có thể thực hiện thao tác cập nhật hoặc bạn có thể tạo bằng URI đó.
- Bạn có thể tạo tài nguyên bao nhiêu lần tùy thích.
- Tạo một tài nguyên bằng phương pháp PUT rất dễ dàng.
- Bạn không cần kiểm tra xem người dùng đã nhấp vào nút gửi nhiều lần hay chưa.
- Nó có thể xác định thực thể kèm theo yêu cầu.
Ưu điểm của phương pháp POST
Dưới đây là những ưu/lợi ích của việc sử dụng phương thức POST:
- Phương pháp này giúp bạn xác định URI tài nguyên.
- Việc chỉ định tiêu đề vị trí tài nguyên mới rất dễ dàng bằng cách sử dụng tiêu đề vị trí.
- Bạn có thể gửi yêu cầu chấp nhận thực thể này làm cấp dưới mới của tài nguyên, được xác định bởi URI.
- Bạn có thể gửi dữ liệu do người dùng tạo đến máy chủ web.
- Nó rất hữu ích khi bạn không biết URL để giữ bất kỳ tài nguyên nào.
- Sử dụng POST khi bạn cần máy chủ kiểm soát việc tạo URL cho tài nguyên của bạn.
- POST là một phương thức an toàn vì các yêu cầu của nó không tồn tại trong lịch sử trình duyệt.
- Bạn có thể dễ dàng truyền một lượng lớn dữ liệu bằng cách sử dụng đường bưu điện.
- Bạn có thể giữ dữ liệu ở chế độ riêng tư.
- Phương pháp này có thể được sử dụng để gửi dữ liệu nhị phân cũng như dữ liệu ASCII.