Async Job / Polling
POST + GET · /api/practice/level4/jobs · Nâng cao
Mô tả bài tập
Một số tác vụ (xuất báo cáo, xử lý ảnh...) không trả kết quả ngay. POST /jobs để tạo job, nhận về { jobId, status: 'pending' } với status 202 Accepted. Sau đó GET /jobs/:jobId lặp lại (poll) - job sẽ chuyển 'pending' -> 'processing' -> 'completed' sau khoảng 5-8 giây, kèm kết quả cuối cùng.
Mục tiêu học được
- Hiểu mẫu thiết kế API bất đồng bộ (202 Accepted + polling)
- Viết vòng lặp poll có điều kiện dừng (tránh vòng lặp vô hạn)
- Test lấy job không tồn tại (404) và lấy kết quả khi job đã completed
Lệnh curl
# Tạo job
curl -i -X POST "http://testing-api.systemhub.uk/api/practice/level4/jobs" -H "X-Practice-Token: YOUR_TOKEN"
# Poll trạng thái (lặp lại vài lần, cách nhau 2 giây)
curl -i "http://testing-api.systemhub.uk/api/practice/level4/jobs/<jobId>" -H "X-Practice-Token: YOUR_TOKEN"
Các bước làm trên Postman
- POST http://testing-api.systemhub.uk/api/practice/level4/jobs, ghi nhớ jobId trả về, kiểm tra status 202
- GET http://testing-api.systemhub.uk/api/practice/level4/jobs/<jobId> ngay lập tức, kiểm tra status='pending' hoặc 'processing'
- Đợi khoảng 8 giây rồi GET lại, kiểm tra status='completed' kèm result
Đăng nhập để lệnh curl ở trên tự động điền sẵn Practice Token thật của bạn.
🧪 Thử nghiệm trực tiếp
Gọi API ngay tại đây. Nếu bạn đã đăng nhập, tiến độ sẽ được ghi nhận tự động khi gọi đúng như kỳ vọng của bài.
Kết quả
Status: