Mã Trạng Thái 202 Accepted Là Gì? API "Tôi Đã Nhận Được Yêu Cầu"

INEZA Felin-Michel

INEZA Felin-Michel

15 tháng 9 2025

Mã Trạng Thái 202 Accepted Là Gì? API "Tôi Đã Nhận Được Yêu Cầu"

Bạn vừa nhấp vào một nút để chạy một báo cáo phức tạp. Hoặc có thể bạn đã yêu cầu một công việc chuyển mã video. Thay vì trang web bị treo trong vài phút, bạn ngay lập tức nhận được thông báo: "Yêu cầu của bạn đã được chấp nhận để xử lý." Vài phút sau, bạn nhận được một email kèm theo liên kết đến báo cáo đã hoàn thành của mình.

Trải nghiệm mượt mà, bất đồng bộ này là một dấu hiệu đặc trưng của phần mềm hiện đại được thiết kế tốt. Và nó được hỗ trợ bởi một mã trạng thái HTTP quan trọng, nhưng thường bị hiểu lầm: 202 Accepted.

Không giống như người anh em 200 OK, báo hiệu "Tôi đã hoàn thành ngay bây giờ," hay 201 Created, báo hiệu "Tôi đã tạo một thứ mới," mã trạng thái 202 Accepted hoàn toàn là về việc quản lý kỳ vọng. Đó là cách máy chủ nói, "Đã nhận được thông báo. Tôi hiểu bạn muốn tôi làm gì. Tôi không thể cung cấp kết quả cho bạn ngay bây giờ, nhưng tôi đã đưa nó vào hàng đợi và tôi sẽ xử lý nó. Bạn không cần phải chờ đợi."

Nó tương đương với việc bạn đưa vé của mình cho một người quản lý nhà hàng bận rộn. Họ không mang thức ăn cho bạn ngay lập tức, nhưng bạn tin rằng vị trí của mình trong hàng đợi đã được đảm bảo và bữa ăn của bạn sẽ sẵn sàng sau cùng.

Nếu bạn đang xây dựng hoặc sử dụng API xử lý các tác vụ chạy dài, việc hiểu 202 Accepted là chìa khóa để tạo ra các ứng dụng phản hồi nhanh, có khả năng mở rộng và thân thiện với người dùng.

Vậy, điều này có ý nghĩa gì, và tại sao việc hiểu nó lại quan trọng đối với các nhà phát triển, người kiểm thử và người tiêu dùng API?

Và trước khi chúng ta đi sâu vào cơ chế, nếu bạn đang thiết kế các API yêu cầu quy trình làm việc bất đồng bộ, bạn cần một công cụ có thể giúp bạn kiểm tra và hình dung các tương tác phức tạp này. Tải xuống Apidog miễn phí; đây là một nền tảng API tất cả trong một cho phép bạn dễ dàng mô phỏng các phản hồi 202, kiểm tra cơ chế thăm dò và đảm bảo các quy trình bất đồng bộ của bạn mạnh mẽ và đáng tin cậy.

nút

Bây giờ, hãy cùng tìm hiểu ý nghĩa của 202 Accepted, khi nào nên sử dụng và cách triển khai nó một cách chính xác.

Thiết lập bối cảnh: Vấn đề với tư duy đồng bộ

Để hiểu tại sao 202 lại cần thiết, trước tiên chúng ta phải nhận ra những hạn chế của các yêu cầu đồng bộ.

Chu trình yêu cầu-phản hồi HTTP điển hình là đồng bộ và chặn:

  1. Client: Gửi một yêu cầu.
  2. Client: Chờ... (điều này thường được gọi là "thời gian đến byte đầu tiên" hoặc TTFB).
  3. Server: Xử lý yêu cầu (điều này có thể liên quan đến các phép tính phức tạp, truy vấn cơ sở dữ liệu, gọi các dịch vụ khác).
  4. Server: Gửi một phản hồi (`200 OK`, `201 Created`, v.v.).
  5. Client: Nhận phản hồi và hành động theo đó.

Mô hình này hoạt động hoàn hảo cho các thao tác nhanh như tìm nạp hồ sơ người dùng, truy xuất danh sách sản phẩm hoặc cập nhật một trường duy nhất. Nhưng nếu thao tác mất 5 giây? 30 giây? 5 phút?

Mã trạng thái `202 Accepted` là giải pháp thanh lịch cho vấn đề này. Nó phá vỡ tính chất chặn của HTTP, cho phép xử lý bất đồng bộ.

Mã HTTP 202 Accepted Thực Sự Có Nghĩa Là Gì?

Mã trạng thái HTTP `202 Accepted` được định nghĩa trong RFC là một phản hồi thành công. Tuy nhiên, đây là một loại thành công rất cụ thể. Mã trạng thái **202 Accepted** thuộc **danh mục 2xx**, thường chỉ ra sự thành công. Nó cho biết rằng:

Tuy nhiên, không giống như `200 OK`, có nghĩa là yêu cầu đã được xử lý thành công và hoàn tất, **202 cho chúng ta biết điều gì đó khác biệt**:

Máy chủ đã chấp nhận yêu cầu, nhưng quá trình xử lý vẫn chưa hoàn tất.

Điều quan trọng là, phản hồi phải cung cấp cho client một số chỉ dẫn về nơi họ có thể kiểm tra trạng thái của yêu cầu hoặc nơi kết quả cuối cùng sẽ có sẵn trong tương lai.

Nói cách khác, 202 là cách lịch sự của máy chủ để nói:

"Này, tôi đã nhận được yêu cầu của bạn. Tôi đang xử lý nó. Nhưng đừng mong đợi kết quả ngay lập tức."

Điều này làm cho nó đặc biệt hữu ích cho các quy trình **thao tác bất đồng bộ** tốn thời gian, như gửi email, xử lý tập dữ liệu lớn hoặc khởi động một tác vụ nền.

Tại Sao 202 Accepted Tồn Tại?

Không phải tất cả các yêu cầu đều có thể được xử lý ngay lập tức. Hãy tưởng tượng nếu mỗi khi bạn gửi một lệnh gọi API, máy chủ phải đợi cho đến khi toàn bộ công việc hoàn tất trước khi phản hồi. Điều đó có thể dẫn đến:

Mã trạng thái **202** giải quyết vấn đề này bằng cách cho phép máy chủ xác nhận các yêu cầu mà không bắt client phải chờ đợi.

Quy trình làm việc bất đồng bộ: Phân tích từng bước

Hãy cùng xem xét một ví dụ cụ thể. Hãy tưởng tượng một API để tạo các báo cáo dữ liệu được cá nhân hóa.

Bước 1: Yêu cầu của Client

Một ứng dụng client gửi yêu cầu `POST` để bắt đầu tạo báo cáo.

POST /api/reports/generate HTTP/1.1Host: api.example.comContent-Type: application/jsonAuthorization: Bearer <token>
{
  "type": "annual_sales",
  "year": 2023,
  "format": "pdf"
}

Bước 2: Phản hồi 202 của Máy chủ

Máy chủ nhận yêu cầu. Nó xác thực rằng yêu cầu được định dạng tốt và người dùng được ủy quyền. Sau đó, nó ngay lập tức đặt công việc vào một hàng đợi xử lý (sử dụng một hệ thống như Redis, RabbitMQ hoặc Amazon SQS) và phản hồi.

HTTP/1.1 202 AcceptedLocation: <https://api.example.com/api/reports/status/job-12345Content-Type:> application/json
{
  "message": "Your report generation request has been accepted and is being processed.",
  "job_id": "job-12345",
  "status_url": "<https://api.example.com/api/reports/status/job-12345>",
  "estimated_completion_time": "2023-10-27T10:05:00Z"
}

Phản hồi này cực kỳ mạnh mẽ. Hãy cùng phân tích nó:

Bước 3: Quá trình xử lý bất đồng bộ

Client hiện đã rảnh để làm những việc khác. Trong khi đó, trên máy chủ:

Bước 4: Client kiểm tra việc hoàn thành

Client hiện có thể thăm dò `status_url` được cung cấp trong phản hồi 202.

GET https://api.example.com/api/reports/status/job-12345

Phản hồi cho yêu cầu thăm dò này có thể thay đổi theo thời gian:

Ngoài ra, máy chủ có thể gửi thông báo qua một **webhook** đến một URL do client cung cấp, đây là một mẫu nâng cao và hiệu quả hơn so với thăm dò.

Đặc điểm chính của 202 Accepted

Dưới đây là những đặc điểm thiết yếu của một phản hồi 202:

202 Accepted so với các mã thành công khác: Biết sự khác biệt

Thật dễ dàng để nhầm lẫn `202` với các mã 2xx khác. Dưới đây là một bảng tóm tắt đơn giản:

Sử dụng `202` khi kết quả sẽ có sẵn trong tương lai, không phải ngay lập tức.

Tại Sao Nên Sử Dụng 202 Accepted? Những Lợi Ích Chính

  1. **Cải thiện trải nghiệm người dùng (UX):** Ứng dụng client vẫn phản hồi nhanh. Người dùng nhận được phản hồi tức thì rằng yêu cầu của họ đã được nhận, chứ không phải một bánh xe quay chết chóc.
  2. **Khả năng mở rộng máy chủ tốt hơn:** Các luồng xử lý yêu cầu chính của máy chủ được giải phóng gần như ngay lập tức. Chúng ủy thác công việc nặng nhọc cho các worker nền, cho phép máy chủ xử lý nhiều yêu cầu đến hơn.
  3. **Xử lý sự không chắc chắn:** Máy chủ có thể chấp nhận một yêu cầu ngay cả khi nó không chắc chắn 100% rằng nó có thể được thực hiện sau này. Ví dụ, nó có thể chấp nhận một yêu cầu phụ thuộc vào một dịch vụ bên thứ ba đang tạm thời ngừng hoạt động.
  4. **Thực tế cho các hoạt động phức tạp:** Nó mô hình hóa chính xác các quy trình trong thế giới thực tốn thời gian, như gửi email, xử lý video, chạy các mô hình học máy hoặc xử lý xuất dữ liệu lớn.

Các trường hợp sử dụng HTTP 202 trong thế giới thực

Bạn sẽ bắt gặp `202 Accepted` trong nhiều ứng dụng hiện đại:

Lợi ích của việc sử dụng 202 Accepted

Tại sao các nhà phát triển và nhà thiết kế API nên sử dụng 202?

  1. **Ngăn chặn thời gian chờ của client**: Người dùng không phải chờ đợi.
  2. **Cải thiện khả năng mở rộng**: Máy chủ không bị kẹt với các tác vụ dài.
  3. **Phản hồi người dùng tốt hơn**: Thay vì im lặng, client biết yêu cầu đang được xử lý.
  4. **Hỗ trợ kiến trúc bất đồng bộ**: Thiết yếu cho các microservice hiện đại.

202 Accepted trong các quy trình làm việc bất đồng bộ

Đây là cách nó thường hoạt động:

  1. **Client gửi một yêu cầu**.
  2. **Máy chủ phản hồi bằng 202** và có thể là một "URL trạng thái".
  3. **Client kiểm tra lại** với điểm cuối trạng thái để xem công việc đã hoàn thành chưa.

Ví dụ:

{
  "status": "processing",
  "check_status": "/jobs/12345/status"
}

Mô hình này giữ cho cả hai bên hài lòng: client nhận được xác nhận tức thì, và máy chủ có không gian để xử lý.

Kiểm tra quy trình làm việc 202 với Apidog

Kiểm tra một luồng API bất đồng bộ phức tạp hơn so với kiểm tra một lệnh gọi đồng bộ đơn giản. Đây là lúc Apidog trở thành một công cụ vô giá.

Với Apidog, bạn có thể:

  1. **Viết script cho luồng:** Tạo một kịch bản kiểm thử mà đầu tiên gửi yêu cầu `POST` và xác thực rằng nó trả về `202` với một `status_url`.
  2. **Trích xuất biến:** Sử dụng script của Apidog để tự động trích xuất `job_id` hoặc `status_url` từ phản hồi `202` và lưu nó dưới dạng biến môi trường.
  3. **Kiểm tra thăm dò:** Tạo một yêu cầu `GET` tiếp theo sử dụng biến đã trích xuất để gọi `status_url`. Bạn có thể cấu hình Apidog để thử lại yêu cầu này cho đến khi nó nhận được trạng thái "đã hoàn thành".
  4. **Xác thực kết quả cuối cùng:** Sau khi công việc hoàn thành, viết các xác nhận để xác thực phản hồi cuối cùng từ URL tải xuống.

Điều này cho phép bạn tự động hóa việc kiểm tra toàn bộ hành trình bất đồng bộ, đảm bảo độ tin cậy và phát hiện các lỗi hồi quy.

Cách kiểm tra phản hồi 202 Accepted (với Apidog)

Đây là nơi **Apidog** tỏa sáng. Không giống như các công cụ tĩnh, Apidog cho phép bạn:

Với Apidog, bạn có thể xây dựng và kiểm tra **các quy trình làm việc 202 từ đầu đến cuối** từ khi chấp nhận đến khi hoàn thành mà không cần chuyển đổi công cụ.

nút

Những cạm bẫy tiềm ẩn và những hiểu lầm phổ biến

Tuy nhiên, 202 có thể bị lạm dụng. Một số cạm bẫy bao gồm:

Thách thức và các phương pháp hay nhất

Việc triển khai `202` một cách chính xác đòi hỏi sự cân nhắc kỹ lưỡng.

  1. **Cung cấp một điểm cuối trạng thái:** Điều này là không thể thương lượng. Bạn **phải** cung cấp một URL (thông qua header `Location` hoặc nội dung phản hồi) nơi client có thể kiểm tra tiến độ và kết quả cuối cùng của yêu cầu.
  2. **Tính bất biến là rất quan trọng:** Nếu client không chắc yêu cầu của họ đã được gửi đi (ví dụ: do sự cố mạng), họ có thể thử lại. API của bạn nên được thiết kế để xử lý các yêu cầu trùng lặp một cách duyên dáng bằng cách sử dụng **khóa bất biến** để ngăn cùng một công việc bị đưa vào hàng đợi nhiều lần.
  3. **Đặt kỳ vọng rõ ràng:** Sử dụng nội dung phản hồi để đưa ra thời gian hoàn thành ước tính hoặc một thông báo trạng thái đơn giản (`đã xếp hàng`, `đang xử lý`, `thất bại`, `thành công`).
  4. **Cân nhắc Webhook:** Để có một giải pháp thay thế hiệu quả hơn cho việc thăm dò, hãy cho phép client đăng ký một URL webhook mà máy chủ của bạn sẽ gọi khi công việc hoàn tất.
  5. **Lập kế hoạch cho sự cố:** Công việc có thể thất bại trong nền. Điểm cuối trạng thái của bạn cần thông báo về các sự cố và có thể cung cấp mã lý do.

Các phương pháp hay nhất để triển khai 202 Accepted

Nếu bạn đang thiết kế API trả về 202, hãy ghi nhớ những phương pháp hay nhất này:

202 Accepted trong REST so với GraphQL APIs

Kết luận: Nắm bắt thiết kế bất đồng bộ

Mã trạng thái HTTP `202 Accepted` là một công cụ mạnh mẽ trong bộ công cụ của nhà thiết kế API. Nó đại diện cho sự chuyển đổi từ việc coi API là các cơ chế yêu cầu-phản hồi đơn giản sang việc coi chúng là các hệ thống để điều phối các quy trình làm việc phức tạp, trong thế giới thực. Mã trạng thái 202 Accepted có thể không phải là mã HTTP nổi tiếng nhất, nhưng nó đóng một vai trò quan trọng trong các quy trình làm việc API bất đồng bộ. Nó nói với client, "Chúng tôi đã nhận được yêu cầu của bạn, nhưng chúng tôi vẫn đang xử lý nó."

Bằng cách sử dụng `202`, bạn xây dựng các API có khả năng mở rộng hơn, linh hoạt hơn và mang lại trải nghiệm vượt trội cho các nhà phát triển sử dụng chúng cũng như người dùng cuối cùng được hưởng lợi từ chúng.

Nó thừa nhận rằng không phải mọi thứ trong phần mềm đều diễn ra ngay lập tức, và nó cung cấp một cách tiêu chuẩn hóa, mạnh mẽ để xử lý thực tế đó.

Vì vậy, lần tới khi bạn thiết kế một điểm cuối cho một tác vụ chạy dài, đừng ép buộc nó phải đồng bộ. Hãy nắm bắt bản chất bất đồng bộ của tác vụ. Trả về `202 Accepted`, cung cấp một URL trạng thái và giải phóng ứng dụng của bạn khỏi sự ràng buộc của yêu cầu chờ đợi. Nếu bạn đang xây dựng hoặc kiểm tra API trả về 202, bạn cần các công cụ cho phép bạn mô phỏng, kiểm tra và tài liệu hóa các quy trình làm việc này mà không gặp rắc rối. Đó chính xác là những gì Apidog mang lại. Sử dụng một công cụ như Apidog để đảm bảo việc triển khai của bạn mạnh mẽ, có thể kiểm tra và dễ dàng tích hợp. Sẵn sàng đơn giản hóa việc kiểm tra và tài liệu hóa API của bạn? Tải xuống Apidog miễn phí ngay hôm nay và biến việc xử lý các mã như 202 Accepted trở nên dễ dàng.

nút

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API