L40 — Error Handling Deep (Production Patterns)
Ba module tương tác giúp bạn "chạm" vào những quyết định khó nhất khi xử lý error trong service production:
1) error nào map sang HTTP status nào (404 / 422 / 500 / 503);
2) retry với exponential backoff + jitter trông như thế nào trên timeline;
3) wrap chain thực sự "trông ra sao" khi đi qua 4 layer, và errors.As extract *AppError ở top.
1. Error category → HTTP status
Click một error type bên dưới — viz sẽ hiện status code, JSON response client thấy, và lý do vì sao đó là con số đúng. Mỗi error có một category (màu viền trái): Domain (lỗi nghiệp vụ — 4xx), Infrastructure (hạ tầng tạm hỏng — 5xx), Programming (bug — panic, recover thành 500).
2. Retry với exponential backoff + jitter
Animate timeline retry: mỗi attempt fail → ngủ baseDelay × 2^(attempt-1) (cap ở maxDelay) với jitter ±50%.
Chọn kịch bản fail (mấy attempt đầu thất bại trước khi thành công) để thấy hành vi.
Lưu ý: VALIDATION (domain error) sẽ bị từ chối retry ngay attempt 1.
3. Error wrap chain — đường đi qua 4 layer + errors.As
Một error đi từ DB driver → Repo → Service → HTTP handler. Mỗi layer wrap thêm context của riêng nó.
Top-of-stack (middleware) dùng errors.As để extract *AppError ở giữa chain.
Chọn cách wrap dưới đây để so sánh GOOD vs BAD và xem extract có thành công không.