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

HTTP Methods

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

Trong thế giới phát triển web, việc hiểu được các sắc thái giữa các phương thức HTTP khác nhau là rất quan trọng. Hai phương thức được sử dụng phổ biến là POST và PUT thường gây nhầm lẫn do sự giống và khác nhau trong việc tạo và cập nhật tài nguyên.

Theo RFC 2616, POST chủ yếu được sử dụng để tạo tài nguyên mới, trong khi PUT có thể tạo hoặc thay thế tài nguyên hiện có. Bài viết này sẽ khám phá chi tiết các phương pháp này và giúp làm rõ nên sử dụng phương pháp nào để tạo tài nguyên.

Yêu cầu Sự miêu tả
@app.route('/resource', methods=['POST']) Xác định tuyến đường trong Flask để xử lý các yêu cầu POST nhằm tạo tài nguyên.
request.json Trích xuất dữ liệu JSON từ nội dung yêu cầu trong Flask.
resources[resource_id] = data Lưu trữ hoặc cập nhật tài nguyên trong từ điển tài nguyên trong Flask.
app.use(express.json()) Bật phân tích cú pháp JSON cho các yêu cầu gửi đến trong Express.
app.post('/resource', (req, res) =>app.post('/resource', (req, res) => { ... }) Xác định tuyến đường trong Express để xử lý các yêu cầu POST nhằm tạo tài nguyên.
app.put('/resource/:id', (req, res) =>app.put('/resource/:id', (req, res) => { ... }) Xác định tuyến đường trong Express để xử lý các yêu cầu PUT nhằm cập nhật hoặc tạo tài nguyên.

Triển khai các phương thức HTTP trong ứng dụng web

Các tập lệnh được cung cấp minh họa cách triển khai Và các phương thức trong các ứng dụng web sử dụng khung Flask và Express. Trong ví dụ về Flask, trang trí được sử dụng để xác định tuyến đường xử lý các yêu cầu POST. Khi một yêu cầu POST được thực hiện, request.json lệnh trích xuất dữ liệu JSON từ phần thân yêu cầu. Nếu ID tài nguyên đã tồn tại, nó sẽ trả về lỗi. Ngược lại, nó lưu tài nguyên mới vào từ điển. Đối với các yêu cầu PUT, trang trí được sử dụng để cập nhật hoặc tạo tài nguyên, đảm bảo dữ liệu được lưu trữ theo ID tài nguyên được chỉ định.

Trong ví dụ về Node.js và Express, máy chủ được thiết lập để phân tích dữ liệu JSON bằng cách sử dụng . Tuyến đường xử lý các yêu cầu POST bằng cách kiểm tra xem tài nguyên đã tồn tại chưa và lưu trữ nó nếu chưa. Các tuyến xử lý các yêu cầu PUT bằng cách cập nhật hoặc tạo tài nguyên dựa trên ID được cung cấp. Cả hai tập lệnh đều minh họa một cách hiệu quả cách các phương thức POST và PUT có thể được sử dụng để quản lý việc tạo và cập nhật tài nguyên trong các ứng dụng web, nêu bật sự khác biệt và trường hợp sử dụng phù hợp cho từng phương thức HTTP.

Sử dụng Flask để triển khai các phương thức POST và PUT

Python với khung Flask

from flask import Flask, request, jsonify
app = Flask(__name__)
resources = {}
@app.route('/resource', methods=['POST'])
def create_resource():
    data = request.json
    resource_id = data.get('id')
    if resource_id in resources:
        return jsonify({'error': 'Resource already exists'}), 400
    resources[resource_id] = data
    return jsonify(data), 201
@app.route('/resource/<int:resource_id>', methods=['PUT'])
def update_or_create_resource(resource_id):
    data = request.json
    resources[resource_id] = data
    return jsonify(data), 200
if __name__ == '__main__':
    app.run(debug=True)

API RESTful với Node.js và Express

JavaScript với Node.js và Express Framework

const express = require('express');
const app = express();
app.use(express.json());
let resources = {}
app.post('/resource', (req, res) => {
    const data = req.body;
    const resourceId = data.id;
    if (resources[resourceId]) {
        return res.status(400).json({ error: 'Resource already exists' });
    }
    resources[resourceId] = data;
    res.status(201).json(data);
});
app.put('/resource/:id', (req, res) => {
    const resourceId = req.params.id;
    resources[resourceId] = req.body;
    res.status(200).json(req.body);
});
app.listen(3000, () => {
    console.log('Server running on port 3000');
});

Sự khác biệt chính giữa phương thức POST và PUT

Một khía cạnh quan trọng khác của việc hiểu sự khác biệt giữa Và trong HTTP là tính bình thường. Tính tạm thời có nghĩa là việc thực hiện nhiều yêu cầu giống hệt nhau sẽ có tác dụng tương tự như thực hiện một yêu cầu duy nhất. Các phương thức này là bình thường, điều đó có nghĩa là cho dù bạn có gửi đi bao nhiêu lần đi chăng nữa PUT yêu cầu, kết quả sẽ giống nhau: tài nguyên sẽ được tạo hoặc cập nhật về cùng trạng thái. Điều này rất quan trọng để đảm bảo hành vi nhất quán và có thể dự đoán được trong các dịch vụ RESTful.

Ngược lại, phương pháp này không bình thường. Nhiều giống hệt nhau yêu cầu có thể tạo nhiều tài nguyên với các URI khác nhau. Tính không bình thường này có lợi khi muốn tạo ra nhiều tài nguyên riêng biệt, chẳng hạn như gửi nhiều mục nhập trong một biểu mẫu. Hiểu được những khác biệt này sẽ giúp quyết định nên sử dụng phương pháp nào dựa trên hành vi bắt buộc của ứng dụng của bạn, đảm bảo nó tuân thủ các nguyên tắc REST và hoạt động như mong đợi.

  1. Mục đích chính của phương thức POST là gì?
  2. Mục đích chính của phương pháp này là tạo một tài nguyên mới dưới dạng cấp dưới của URI đã chỉ định.
  3. Phương pháp PUT khác nhau như thế nào về mặt xử lý tài nguyên?
  4. Các phương thức được sử dụng để tạo hoặc thay thế tài nguyên tại URI đã chỉ định.
  5. Phương pháp PUT có bình thường không?
  6. Vâng phương thức này là bình thường, nghĩa là nhiều yêu cầu giống hệt nhau sẽ có tác dụng tương tự như một yêu cầu.
  7. Tại sao phương thức POST được coi là không

    Tóm lại, cả hai phương thức POST và PUT đều phục vụ các mục đích riêng biệt trong hoạt động HTTP. POST lý tưởng để tạo tài nguyên mới mà không chỉ định URI của chúng, khiến nó trở nên linh hoạt khi thêm nhiều mục nhập. Mặt khác, PUT phù hợp để tạo hoặc cập nhật tài nguyên tại một URI cụ thể, đảm bảo tính bình thường. Hiểu những khác biệt này là điều cần thiết để triển khai API RESTful hiệu quả và hiệu quả. Bằng cách sử dụng từng phương pháp một cách thích hợp, nhà phát triển có thể đảm bảo ứng dụng của họ xử lý việc tạo và cập nhật tài nguyên một cách nhất quán và có thể dự đoán được.