# 🛡️ Cheatsheet: Chống lạm dụng API: rate limit, bot và chi phí AI

By Better Wise

> This cheatsheet is premium content. Sign in and purchase the course to view the full content.

> **Tip:** 
> Nguyên tắc xuyên suốt: **đặt giới hạn trước khi mở cửa**. Mọi endpoint tốn tiền hoặc tốn tài nguyên phải có trần rõ ràng trước khi có traffic thật.

---

## Bảng tra nhanh: dùng gì cho việc gì

| Vấn đề | Công cụ | Phạm vi | Chặn ở đâu |
| --- | --- | --- | --- |
| Một IP spam dồn dập | Rate limit theo IP | IP | Trước khi vào handler |
| Một user gọi quá nhiều | Rate limit theo user | user id / API key | Trước khi vào handler |
| Tổng dùng trong tháng | Quota theo user | user id | Trước khi gọi dịch vụ tốn tiền |
| Bot tự động đăng ký / spam form | Captcha + chống bot | session / IP | Ở endpoint công khai |
| Request rác tốn CPU / token | Validate input sớm | request body | Ngay đầu handler |
| Hóa đơn AI tăng vọt | Budget + cảnh báo | toàn hệ thống / user | Trước và sau mỗi lần gọi |

**Thứ tự lớp bảo vệ (chạy từ ngoài vào trong):**

```mermaid
flowchart TD
    Req["📥 Request vào"] --> IP["🌐 Rate limit theo IP"]
    IP --> Auth["🔑 Xác thực user"]
    Auth --> UR["👤 Rate limit theo user"]
    UR --> Quota["📊 Kiểm tra quota"]
    Quota --> Val["✅ Validate input"]
    Val --> Bot["🤖 Captcha / chống bot nếu cần"]
    Bot --> Budget["💰 Kiểm tra budget còn lại"]
    Budget --> Call["☁️ Gọi API AI bên thứ ba"]
    Call --> Log["🧾 Ghi log chi phí"]
```

---

## Module 1: Kiểm soát lưu lượng và chống lạm dụng API

### 1.1 Rate limiting theo IP và theo user

| Thuật toán | Cách hoạt động | Khi dùng |
| --- | --- | --- |
| Fixed window | Đếm trong khung cố định (vd 60s) | Đơn giản, chấp nhận burst ở biên |
| Sliding window | Cửa sổ trượt theo thời gian | Mượt hơn, hay dùng cho API công khai |
| Token bucket | Nạp token đều, tiêu khi gọi | Cho phép burst có kiểm soát |
| Leaky bucket | Xả đều theo tốc độ cố định | Làm phẳng lưu lượng |
