# Hướng dẫn test api

# 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

# HƯỚNG DẪN KIỂM THỬ API CHI TIẾT BẰNG POSTMAN

### PHẦN 2: HƯỚNG DẪN KIỂM THỬ API CHI TIẾT BẰNG POSTMAN

#### 2.1. Postman là gì?

Postman là công cụ **miễn phí** mạnh nhất hiện nay để thiết kế, kiểm thử và document API.

#### 2.2. Cài đặt Postman

1. Truy cập: [https://www.postman.com/downloads/](https://www.postman.com/downloads/)
2. Tải phiên bản phù hợp (Windows/Mac/Linux)
3. Cài đặt và đăng ký tài khoản (khuyến khích dùng tài khoản để lưu Collection trên cloud)

#### 2.3. Giao diện Postman cơ bản

- **Sidebar**: Collections, Environments, History…
- **Workspace**: nơi soạn request
- **Response**: khu vực hiển thị kết quả

#### 2.4. Tạo và thực hiện Request cơ bản

**Bước 1:** Mở Postman → New → HTTP Request

**Bước 2:** Chọn phương thức (GET/POST…)

**Bước 3:** Nhập URL

**Bước 4:** Thêm Headers, Params, Body (nếu cần)

**Bước 5:** Nhấn **Send**

#### 2.5. Ví dụ thực hành với JSONPlaceholder (API test miễn phí)

**Base URL:** https://jsonplaceholder.typicode.com

**Ví dụ 1: GET – Lấy danh sách bài viết**

- Method: **GET**
- URL: https://jsonplaceholder.typicode.com/posts
- Send → Kết quả: mảng JSON 100 bài viết

**Ví dụ 2: GET – Lấy 1 bài viết theo ID**

- URL: https://jsonplaceholder.typicode.com/posts/1

**Ví dụ 3: POST – Tạo bài viết mới**

- Method: **POST**
- URL: https://jsonplaceholder.typicode.com/posts
- Body → raw → JSON:

<div dir="auto" id="bkmrk-json"><div data-testid="code-block"><div><div>JSON</div><div>  
</div></div></div></div>```
{
  "title": "Bài viết của Dillon",
  "body": "Nội dung test API",
  "userId": 1
}
```

<div dir="auto" id="bkmrk-"><div data-testid="code-block"><div></div></div></div>**Ví dụ 4: PUT – Cập nhật bài viết**

- Method: **PUT**
- URL: https://jsonplaceholder.typicode.com/posts/1

**Ví dụ 5: DELETE**

- Method: **DELETE**
- URL: https://jsonplaceholder.typicode.com/posts/1