# LÝ THUYẾT VỀ API

### PHẦN 1: LÝ THUYẾT VỀ API

#### 1.1. API là gì?

**API (Application Programming Interface – Giao diện Lập trình Ứng dụng)** là một tập hợp **quy tắc và giao thức** cho phép các ứng dụng phần mềm khác nhau giao tiếp và trao đổi dữ liệu với nhau mà không cần biết chi tiết bên trong.

**Ví dụ minh họa dễ hiểu:** Khi bạn gọi món ăn ở nhà hàng, bạn không vào bếp tự nấu mà chỉ nói với **người phục vụ (API)**. Người phục vụ sẽ truyền yêu cầu đến bếp (server) và mang món ăn (dữ liệu) ra cho bạn.

#### 1.2. Các loại API phổ biến

<div id="bkmrk-lo%E1%BA%A1i-api-m%C3%B4-t%E1%BA%A3-v%C3%AD-d%E1%BB%A5"><div><div dir="auto"><table dir="auto"><thead><tr><th data-col-size="sm">Loại API</th><th data-col-size="lg">Mô tả</th><th data-col-size="lg">Ví dụ thực tế</th></tr></thead><tbody><tr><td data-col-size="sm">**Web API**</td><td data-col-size="lg">API chạy trên web, dùng HTTP</td><td data-col-size="lg">Google Maps API, OpenWeather</td></tr><tr><td data-col-size="sm">**Library API**</td><td data-col-size="lg">Thư viện trong code</td><td data-col-size="lg">Math library trong Python</td></tr><tr><td data-col-size="sm">**Operating System API**</td><td data-col-size="lg">API của hệ điều hành</td><td data-col-size="lg">Windows API</td></tr><tr><td data-col-size="sm">**Hardware API**</td><td data-col-size="lg">Giao tiếp với phần cứng</td><td data-col-size="lg">Camera API trên điện thoại</td></tr></tbody></table>

</div></div><div></div><div></div></div>Trong phát triển web hiện nay, chúng ta chủ yếu làm việc với **Web API**, đặc biệt là **RESTful API**.

#### 1.3. RESTful API là gì?

**REST (Representational State Transfer)** là một **kiến trúc phần mềm** được Roy Fielding đề xuất năm 2000. RESTful API là API tuân thủ 6 nguyên tắc chính của REST:

1. Client-Server
2. Stateless (mỗi request phải chứa đầy đủ thông tin)
3. Cacheable
4. Uniform Interface
5. Layered System
6. Code on Demand (tùy chọn)

#### 1.4. Phương thức HTTP (HTTP Methods) trong API

<div id="bkmrk-ph%C6%B0%C6%A1ng-th%E1%BB%A9c-%C3%9D-ngh%C4%A9a-"><div><div dir="auto"><table dir="auto"><thead><tr><th data-col-size="md">Phương thức</th><th data-col-size="xl">Ý nghĩa</th><th data-col-size="md">CRUD</th><th data-col-size="md">An toàn &amp; Idempotent</th></tr></thead><tbody><tr><td data-col-size="md">**GET**</td><td data-col-size="xl">Lấy dữ liệu</td><td data-col-size="md">Read</td><td data-col-size="md">Có</td></tr><tr><td data-col-size="md">**POST**</td><td data-col-size="xl">Tạo dữ liệu mới</td><td data-col-size="md">Create</td><td data-col-size="md">Không</td></tr><tr><td data-col-size="md">**PUT**</td><td data-col-size="xl">Cập nhật toàn bộ</td><td data-col-size="md">Update</td><td data-col-size="md">Có</td></tr><tr><td data-col-size="md">**PATCH**</td><td data-col-size="xl">Cập nhật một phần</td><td data-col-size="md">Update</td><td data-col-size="md">Không</td></tr><tr><td data-col-size="md">**DELETE**</td><td data-col-size="xl">Xóa dữ liệu</td><td data-col-size="md">Delete</td><td data-col-size="md">Có</td></tr></tbody></table>

</div></div><div></div><div></div></div>#### 1.5. Mã trạng thái HTTP (HTTP Status Codes)

<div id="bkmrk-nh%C3%B3m-%C3%9D-ngh%C4%A9a-m%C3%A3-ph%E1%BB%95-"><div><div dir="auto"><table dir="auto"><thead><tr><th data-col-size="xs">Nhóm</th><th data-col-size="lg">Ý nghĩa</th><th data-col-size="xl">Mã phổ biến</th></tr></thead><tbody><tr><td data-col-size="xs">2xx</td><td data-col-size="lg">Thành công</td><td data-col-size="xl">200 OK, 201 Created, 204 No Content</td></tr><tr><td data-col-size="xs">3xx</td><td data-col-size="lg">Chuyển hướng</td><td data-col-size="xl">301, 302</td></tr><tr><td data-col-size="xs">4xx</td><td data-col-size="lg">Lỗi từ phía Client</td><td data-col-size="xl">400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found</td></tr><tr><td data-col-size="xs">5xx</td><td data-col-size="lg">Lỗi từ phía Server</td><td data-col-size="xl">500 Internal Server Error</td></tr></tbody></table>

</div></div><div></div><div></div></div>#### 1.6. Xác thực và Ủy quyền (Authentication &amp; Authorization)

Các phương pháp phổ biến:

- **API Key** (đơn giản)
- **Basic Auth** (username + password)
- **Bearer Token / JWT** (phổ biến nhất hiện nay)
- **OAuth 2.0** (Google, Facebook login)

#### 1.7. Định dạng dữ liệu

- **JSON** (phổ biến nhất)
- XML (cũ hơn, SOAP dùng nhiều)
- Form-data (upload file)

#### 1.8. Best Practices khi thiết kế API

- Sử dụng danh từ cho resource (ví dụ: /users, /posts)
- Phiên bản API (/v1/users)
- Pagination, Filtering, Sorting
- Rate Limiting
- Hỗ trợ CORS
- Document API bằng Swagger/OpenAPI