Nội dung

    Phản hồi máy chủ 422 Unprocessable Entity

    Định nghĩa và ứng dụng của mã trạng thái 422

    Mã trạng thái HTTP 422 (Unprocessable Entity) là mã cho biết máy chủ đã hiểu nội dung của yêu cầu nhưng không thể xử lý nó do có những lỗi ngữ nghĩa. Điều này có nghĩa là dữ liệu mà máy khách đã gửi không đúng định dạng hoặc không đáp ứng các yêu cầu cần thiết của máy chủ.

    422 - Unprocessable Entity

    Các tình huống có thể xảy ra lỗi 422

    • Định dạng dữ liệu không đúng: Dữ liệu được gửi không khớp với định dạng mong đợi của máy chủ.
    • Thiếu các trường bắt buộc: Một hoặc nhiều trường cần thiết không được cung cấp trong yêu cầu.
    • Giá trị không được hỗ trợ trong các trường: Dữ liệu được gửi chứa các giá trị không hợp lệ hoặc không được phép.

    Ví dụ thực tế về việc sử dụng mã trạng thái 422

    Ví dụ 1: Lỗi xác thực biểu mẫu

    Khi máy khách gửi dữ liệu biểu mẫu đến máy chủ, nếu có lỗi xác thực, máy chủ sẽ trả về mã trạng thái 422. Ví dụ, nếu trường email không có định dạng chính xác, máy chủ sẽ phản hồi như sau:

    HTTP/1.1 422 Unprocessable Entity
    Content-Type: application/json
    
    {
        "errors": {
            "email": "Email không hợp lệ."
        }
    }
    

    Ví dụ 2: Xử lý dữ liệu API

    Khi máy chủ không thể xử lý dữ liệu đầu vào từ API, mã trạng thái 422 sẽ được trả về. Ví dụ, nếu máy khách gửi một giá trị không hợp lệ cho trường tuổi:

    HTTP/1.1 422 Unprocessable Entity
    Content-Type: application/json
    
    {
        "errors": {
            "age": "Giá trị tuổi phải là một số dương."
        }
    }
    

    Ví dụ 3: Làm việc với tệp tin

    Nếu máy khách cố gắng tải lên một tệp tin có định dạng không được hỗ trợ, máy chủ sẽ phản hồi với mã trạng thái 422 và lý do cụ thể:

    HTTP/1.1 422 Unprocessable Entity
    Content-Type: application/json
    
    {
        "errors": {
            "file": "Định dạng tệp không được hỗ trợ."
        }
    }
    

    Cách sửa lỗi gây ra mã trạng thái 422

    Sửa lỗi trên ngôn ngữ JavaScript

    const requestData = {
        email: "example@domain", // Lỗi: Địa chỉ email không hợp lệ
    };
    
    fetch('/api/submit', {
        method: 'POST',
        body: JSON.stringify(requestData)
    })
    .then(response => {
        if (response.status === 422) {
            return response.json();
        }
    });
    

    Để sửa lỗi, đảm bảo rằng địa chỉ email phải hợp lệ.

    Sửa lỗi trên ngôn ngữ Python

    import requests
    
    data = {
        'age': -5  # Lỗi: Tuổi không thể âm
    }
    
    response = requests.post('https://api.example.com/user', json=data)
    
    if response.status_code == 422:
        print(response.json())
    

    Sử dụng xác thực để đảm bảo dữ liệu luôn hợp lệ trước khi gửi.

    Sửa lỗi trên ngôn ngữ PHP

    $data = [
        'username' => '' // Lỗi: Tên người dùng là trường bắt buộc
    ];
    
    $response = $client->post('/api/user', ['json' => $data]);
    
    if ($response->getStatusCode() == 422) {
        $errors = json_decode($response->getBody(), true);
    }
    

    Cần cấu hình máy chủ để xử lý đúng các dữ liệu đầu vào.

    Khuyến nghị để tránh mã trạng thái 422

    • Xác thực dữ liệu ở phía máy khách: Đảm bảo rằng dữ liệu được kiểm tra trước khi gửi đến máy chủ.
    • Tài liệu rõ ràng các yêu cầu của API: Cung cấp thông tin chi tiết về các trường và định dạng cần thiết.
    • Ghi lại lỗi để dễ dàng chẩn đoán: Lưu trữ thông tin về các lỗi để có thể phân tích và khắc phục kịp thời.