# 05.01. API Testing

## Mục đích
Đảm bảo tính đúng đắn, độ tin cậy, hiệu suất và bảo mật của các giao diện lập trình ứng dụng (API). Kiểm thử API tập trung vào việc xác thực logic nghiệp vụ ở tầng server, khả năng trao đổi dữ liệu giữa các thành phần phần mềm và đảm bảo hệ thống hoạt động ổn định trước khi tích hợp với giao diện người dùng (UI).

## Kiến thức cần có
- **Giao thức mạng:** Hiểu về HTTP/HTTPS, các phương thức (GET, POST, PUT, DELETE, PATCH).
- **Cấu trúc dữ liệu:** Thành thạo JSON, XML, Query Parameters, Form-data.
- **Mã phản hồi (Status Codes):** Hiểu ý nghĩa các nhóm mã 2xx (Thành công), 3xx (Chuyển hướng), 4xx (Lỗi Client), 5xx (Lỗi Server).
- **Xác thực và Ủy quyền:** Biết cách sử dụng Bearer Token, API Keys, OAuth2, Basic Auth.
- **Công cụ:** Sử dụng thành thạo Postman, Insomnia, JMeter hoặc các thư viện code (RestAssured, Axios).

## Quy trình thực hiện
1. **Phân tích tài liệu API:** Đọc Swagger/OpenAPI hoặc tài liệu kỹ thuật để hiểu các Endpoint, Request payload, và Expected Response.
2. **Thiết lập môi trường:** Cấu hình Base URL, biến môi trường (Environment variables) và các thông tin xác thực cần thiết.
3. **Thiết kế kịch bản kiểm thử:**
    - **Happy Path:** Kiểm tra với dữ liệu hợp lệ.
    - **Negative Testing:** Kiểm tra với dữ liệu không hợp lệ, thiếu trường bắt buộc, sai định dạng.
    - **Boundary Testing:** Kiểm tra giới hạn của các tham số đầu vào.
4. **Thực thi và Kiểm chứng:** Gửi request và kiểm tra Response (Status code, Body, Headers, Response time).
5. **Kiểm tra tác động DB (nếu có):** Xác nhận dữ liệu được lưu trữ hoặc thay đổi chính xác trong cơ sở dữ liệu sau khi gọi API.

## Checklist
- [ ] Status code trả về đúng với kịch bản (ví dụ: 201 cho tạo mới, 404 cho không tìm thấy).
- [ ] Cấu trúc JSON/XML của Response khớp với schema định nghĩa.
- [ ] Dữ liệu trong Response chính xác (kiểu dữ liệu, giá trị cụ thể).
- [ ] Các trường bắt buộc (Required fields) được xử lý đúng (trả lỗi nếu thiếu).
- [ ] API trả về thông báo lỗi thân thiện và mã lỗi logic chính xác (Error codes).
- [ ] Thời gian phản hồi (Response time) nằm trong ngưỡng cho phép.
- [ ] Header chứa các thông tin bảo mật cần thiết (ví dụ: `X-Content-Type-Options: nosniff`).
- [ ] Kiểm tra lỗi bảo mật cơ bản: Không bị IDOR, không lộ stack trace khi gặp lỗi 500.

## Output mong đợi
- **Bộ sưu tập API (Postman Collection):** Chứa đầy đủ các request đã được phân loại.
- **Báo cáo kết quả kiểm thử:** Danh sách các endpoint đã test kèm trạng thái (Pass/Fail).
- **Tài liệu lỗi (Bug Reports):** Mô tả chi tiết các lỗi logic, dữ liệu hoặc hiệu năng phát hiện được.
- **Scripts tự động hóa (nếu có):** Các đoạn mã kiểm thử tự động để chạy lại khi cần.
