Xử lý Lỗi REST API với Kỹ thuật Luồng Điều khiển
Trong hoạt động chuyên sâu này, bạn sẽ làm việc với một ứng dụng Python mẫu đã được tích hợp sẵn Cisco Webex Teams API. Nhiệm vụ của bạn là nâng cấp ứng dụng để xử lý một cách có hệ thống các lỗi phổ biến trong môi trường API sản xuất: timeout mạng và giới hạn tốc độ truy cập (rate limiting). Thay vì để ứng dụng sập hoặc bỏ qua lỗi, bạn sẽ triển khai logic kiểm soát luồng lỗi thông minh với khả năng thông báo và thử lại (retry). Mục tiêu Kỹ thuật
- Nhận diện và xử lý ngoại lệ Timeout khi kết nối đến REST API
- Phát hiện mã trạng thái HTTP 429 (Too Many Requests) và áp dụng chiến lược backoff
- Viết kiểm thử đơn vị (unit test) xác nhận hành vi xử lý lỗi
- Sử dụng Test Explorer trong VS Code để thực thi và giám sát kết quả kiểm thử
Cấu trúc Mã Nguồn
Mã khung đã được chuẩn bị trước để bạn tập trung vào việc mở rộng logic xử lý lỗi:
- messenger.py: Chứa lớp Messenger, quản lý giao tiếp với Webex Teams API. Phương thức get_messages() hiện tại có thể gửi yêu cầu và in thông điệp nếu phản hồi thành công. Trong bước tiếp theo, bạn sẽ chỉnh sửa phương thức này để xử lý timeout và HTTP 429 một cách chuẩn xác.
- test_error_control.py: Chứa các kiểm thử đơn vị giúp xác minh mã của bạn hoạt động đúng. Đây là công cụ thiết yếu để đảm bảo chất lượng phần mềm khi triển khai vào môi trường thực tế.
Thực hành Bước một – Thiết lập Môi trường Kiểm thử
- Mở Visual Studio Code, vào thư mục dự án.
- Kích hoạt một môi trường ảo (python -m venv venv và source venv/bin/activate hoặc tương đương).
- Cài đặt các thư viện cần thiết nếu chưa có.
- Mở tiện ích mở rộng Test Explorer (nên cài sẵn trong VS Code).
- Chạy bài kiểm thử test_network_no_errors để đảm bảo môi trường hoạt động bình thường.
Bước hai – Kiểm thử và Triển khai Xử lý Timeout
Bạn sẽ thực hiện hai kiểm thử:
- test_network_timeout_throws: Kiểm tra việc ném ra ngoại lệ khi xảy ra timeout kết nối.
- test_network_timeout_handled: Kiểm tra mã xử lý timeout đúng cách – thử lại nhiều lần rồi mới thông báo lỗi.
Sau khi xác nhận test_network_timeout_throws pass, bạn sẽ chỉnh sửa messenger.py để:
- Bắt ngoại lệ requests.exceptions.Timeout
- Áp dụng retry với giới hạn cố định (ví dụ: 3 lần)
- Sau mỗi lần thất bại, in thông báo và chờ thời gian ngắn trước khi thử lại
Thực hiện lại bài kiểm thử test_network_timeout_handled. Nếu pass, bạn đã xử lý đúng lỗi timeout.
Bước ba – Kiểm thử và Triển khai Xử lý Giới Hạn Tốc Độ (Rate Limiting)
Tiếp theo là hai bài kiểm thử cho HTTP 429:
- test_rate_limit_throws: Đảm bảo mã ném ngoại lệ khi nhận mã HTTP 429.
- test_rate_limit_handled: Đảm bảo hệ thống xử lý mã 429 với backoff và retry hợp lý.
Cập nhật mã của bạn để:
- Phát hiện HTTP 429 trong response
- Trích xuất thời gian chờ (Retry-After nếu có trong header)
- Tạm dừng trước khi retry
Chạy kiểm thử để xác nhận hành vi đã đúng.
Tổng kết
Bài thực hành này giúp bạn xây dựng kỹ năng kiểm soát lỗi một cách bài bản và chuyên nghiệp – yếu tố then chốt khi làm việc với REST API trong môi trường mạng doanh nghiệp. Thay vì phản ứng bị động với lỗi, bạn đang chuyển sang tư duy “lập trình có khả năng phục hồi” (resilient programming) – một phần cốt lõi của DevNet ở cấp độ CCIE.