Hiểu sự khác biệt giữa POST và PUT trong HTTP

Hiểu sự khác biệt giữa POST và PUT trong HTTP
Hiểu sự khác biệt giữa POST và PUT trong HTTP

Giới thiệu về phương thức HTTP

Khi làm việc với các dịch vụ web RESTful, điều quan trọng là phải hiểu sự khác biệt giữa các phương thức HTTP, đặc biệt là POSTPUT. Những phương pháp này thường được sử dụng để tạo và cập nhật tài nguyên nhưng chúng hoạt động theo những cách riêng biệt. Hiểu mục đích riêng và ứng dụng phù hợp của chúng có thể giúp đảm bảo rằng thiết kế API của bạn vừa hiệu quả vừa trực quan.

POST thường được sử dụng để tạo tài nguyên mới, trong khi PUT được sử dụng để tạo hoặc thay thế tài nguyên tại một URI cụ thể. Sự khác biệt này, mặc dù tinh tế, nhưng có ý nghĩa quan trọng đối với cách quản lý và tương tác với các tài nguyên trong môi trường dịch vụ web.

Yêu cầu Sự miêu tả
express() Khởi tạo ứng dụng Express.
app.use(express.json()) Phần mềm trung gian để phân tích các yêu cầu JSON đến.
app.post() Xác định tuyến POST để xử lý việc tạo tài nguyên.
app.put() Xác định tuyến PUT để xử lý việc cập nhật hoặc thay thế tài nguyên.
req.body Truy cập dữ liệu JSON được gửi trong nội dung yêu cầu.
res.status().send() Đặt mã trạng thái HTTP và gửi phản hồi cho máy khách.
fetch() Thực hiện các yêu cầu HTTP từ giao diện người dùng.
method: 'POST' Chỉ định phương thức HTTP để sử dụng trong yêu cầu tìm nạp.
headers: { 'Content-Type': 'application/json' } Đặt tiêu đề yêu cầu để biểu thị nội dung JSON.
body: JSON.stringify(data) Chuyển đổi dữ liệu đối tượng JavaScript thành chuỗi JSON cho nội dung yêu cầu.

Hiểu chức năng của tập lệnh POST và PUT

Tập lệnh phụ trợ sử dụng Node.js và Express trình bày cách xử lý các phương thức HTTP POSTPUT cho việc quản lý tài nguyên. Các express() chức năng khởi chạy ứng dụng Express, trong khi app.use(express.json()) phần mềm trung gian được sử dụng để phân tích các yêu cầu JSON đến. Các app.post() phương thức xác định lộ trình để tạo tài nguyên, trong đó dữ liệu tài nguyên được trích xuất từ ​​đó req.body và được lưu trữ trong một đối tượng phía máy chủ. Phản hồi được gửi lại cho khách hàng với mã trạng thái 201 cho biết tài nguyên đã được tạo thành công.

Các app.put() phương thức xác định lộ trình để cập nhật hoặc thay thế tài nguyên hiện có. Phương pháp này sử dụng ID tài nguyên từ req.params.id và dữ liệu từ req.body để cập nhật đối tượng phía máy chủ. Phản hồi được gửi lại với mã trạng thái 200, cho biết tài nguyên đã được cập nhật thành công. Tập lệnh giao diện người dùng sử dụng API tìm nạp để thực hiện các yêu cầu HTTP này. Các fetch() chức năng được sử dụng với các phương pháp thích hợp (POSTPUT) và các tiêu đề để tương tác với phần phụ trợ, đảm bảo rằng tài nguyên được tạo và cập nhật chính xác từ phía máy khách.

Tập lệnh phụ trợ sử dụng Node.js và Express

Tập lệnh này trình bày cách sử dụng các phương thức POST và PUT trong phần phụ trợ Node.js và Express

const express = require('express');
const app = express();
app.use(express.json());

let resources = {};

app.post('/resource', (req, res) => {
  const id = generateId();
  resources[id] = req.body;
  res.status(201).send({ id, ...req.body });
});

app.put('/resource/:id', (req, res) => {
  const id = req.params.id;
  resources[id] = req.body;
  res.status(200).send({ id, ...req.body });
});

function generateId() {
  return Math.random().toString(36).substr(2, 9);
}

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

Tập lệnh giao diện người dùng sử dụng JavaScript và API tìm nạp

Tập lệnh này trình bày cách thực hiện các yêu cầu POST và PUT từ ứng dụng giao diện người dùng bằng cách sử dụng JavaScript và API tìm nạp

const createResource = async (data) => {
  const response = await fetch('http://localhost:3000/resource', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  });
  return response.json();
};

const updateResource = async (id, data) => {
  const response = await fetch(`http://localhost:3000/resource/${id}`, {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  });
  return response.json();
};

// Example usage
createResource({ name: 'New Resource' }).then(data => console.log(data));
updateResource('existing-id', { name: 'Updated Resource' }).then(data => console.log(data));

Khám phá việc tạo tài nguyên trong API RESTful

Khi thiết kế API RESTful, việc chọn giữa POSTPUT phương pháp tạo tài nguyên phụ thuộc vào trường hợp sử dụng và hành vi mong muốn. Các POST phương thức được sử dụng để tạo tài nguyên cấp dưới mới theo tài nguyên được chỉ định. Nó không bình thường, nghĩa là nhiều yêu cầu POST giống hệt nhau sẽ dẫn đến nhiều tài nguyên được tạo. Phương pháp này lý tưởng khi máy chủ xác định URI của tài nguyên mới.

Mặt khác, PUT Phương thức có thể tạo hoặc thay thế một tài nguyên tại một URI cụ thể. Đó là idempotent, có nghĩa là nhiều yêu cầu đặt giống hệt nhau sẽ tạo ra kết quả tương tự như một yêu cầu duy nhất. Phương pháp này phù hợp cho các kịch bản trong đó máy khách chỉ định URI của tài nguyên sẽ được tạo hoặc cập nhật. Hiểu những khác biệt này giúp thiết kế API phù hợp với các hành vi và yêu cầu dự kiến.

Câu hỏi thường gặp về POST và PUT trong HTTP

  1. Công dụng chính của phương thức POST là gì?
  2. Các POST phương thức chủ yếu được sử dụng để tạo tài nguyên mới dưới dạng cấp dưới của tài nguyên được chỉ định.
  3. Công dụng chính của phương pháp PUT là gì?
  4. Các PUT phương thức được sử dụng để tạo hoặc thay thế tài nguyên tại một URI cụ thể.
  5. POST có bình thường không?
  6. Không, cái POST phương thức không bình thường, nghĩa là nhiều yêu cầu POST giống hệt nhau sẽ tạo ra nhiều tài nguyên.
  7. PUT có bình thường không?
  8. Vâng PUT phương thức này là bình thường, nghĩa là nhiều yêu cầu PUT giống hệt nhau sẽ tạo ra kết quả giống như một yêu cầu duy nhất.
  9. Khi nào bạn nên sử dụng POST thay vì PUT?
  10. Sử dụng POST khi máy chủ xác định URI của tài nguyên mới và máy khách không cần chỉ định nó.
  11. Khi nào bạn nên sử dụng PUT qua POST?
  12. Sử dụng PUT khi máy khách chỉ định URI của tài nguyên sẽ được tạo hoặc cập nhật.
  13. PUT có thể được sử dụng để cập nhật tài nguyên không?
  14. Vâng PUT phương thức có thể cập nhật tài nguyên hiện có nếu URI được chỉ định tham chiếu đến tài nguyên hiện có.
  15. POST có thể được sử dụng để cập nhật tài nguyên không?
  16. Trong khi POST về mặt kỹ thuật có thể cập nhật một tài nguyên, nó thường được sử dụng để tạo tài nguyên mới.
  17. Điều gì xảy ra nếu URI trong yêu cầu PUT không tồn tại?
  18. Nếu URI không tồn tại, PUT phương thức có thể tạo tài nguyên mới tại URI đó.
  19. Mã trạng thái phản hồi cho yêu cầu POST thành công là gì?
  20. Một thành công POST yêu cầu thường trả về mã trạng thái 201 Đã tạo.

Những điểm chính rút ra cho POST và PUT trong HTTP

Việc chọn phương thức HTTP thích hợp để tạo tài nguyên là điều cần thiết để xây dựng các API RESTful hiệu quả và hiệu quả. Các POST phương pháp phù hợp nhất để tạo tài nguyên mới trong đó máy chủ xác định URI của tài nguyên. Nó không bình thường, nghĩa là nhiều yêu cầu có thể dẫn đến nhiều lần tạo tài nguyên. Ngược lại, PUT phương thức này lý tưởng khi máy khách chỉ định URI cho tài nguyên và nó có thể được sử dụng để tạo hoặc cập nhật tài nguyên. Nó bình thường, đảm bảo kết quả nhất quán ngay cả với các yêu cầu lặp đi lặp lại.

Hiểu được những sắc thái này giúp nhà phát triển thiết kế các API phù hợp với các hành vi và yêu cầu dự kiến. Các ví dụ được cung cấp minh họa cách triển khai các phương pháp này trong hệ thống phụ trợ bằng Node.js và Express, đảm bảo rằng tài nguyên được quản lý hiệu quả từ cả phía máy chủ và máy khách.

Suy nghĩ cuối cùng về phương pháp POST và PUT

Tóm lại, cả hai phương thức POSTPUT đều có vai trò riêng biệt trong việc tạo và quản lý tài nguyên trong API RESTful. POST lý tưởng để tạo tài nguyên mới mà không cần chỉ định URI, trong khi PUT tốt hơn để tạo hoặc cập nhật tài nguyên tại một URI được chỉ định. Bằng cách hiểu và sử dụng hợp lý các phương pháp này, nhà phát triển có thể thiết kế các API mạnh mẽ, đáng tin cậy và phù hợp với các nguyên tắc của kiến ​​trúc RESTful.