Get in touch
or send us a question?
CONTACT

Restful API Design

1. Rest API Principles
1.1 Client-Server

Kiến trúc client-server phân tách các vai trò của máy khách (client) và máy chủ (server). Máy khách gửi yêu cầu (request) và máy chủ trả lời (response) dựa trên yêu cầu đó.

Lợi ích của việc tách biệt giữa client và server:
Độc lập phát triển: Client và server có thể phát triển, bảo trì, và nâng cấp độc lập với nhau.
Tái sử dụng: Một server có thể phục vụ nhiều loại client khác nhau (web, mobile, desktop).
Bảo mật: Tách biệt giúp bảo mật tốt hơn vì client không truy cập trực tiếp đến cơ sở dữ liệu hay logic xử lý trên server.
1.2 Stateless

Mỗi yêu cầu từ client đến server phải chứa tất cả thông tin cần thiết để server có thể hiểu và xử lý yêu cầu. Server không lưu trữ trạng thái giữa các yêu cầu.
Lợi ích:
Đơn giản hóa thiết kế:
Không cần duy trì trạng thái phiên làm việc (session) trên server.
Khả năng mở rộng: Dễ dàng phân phối và cân bằng tải vì bất kỳ server nào cũng có thể xử lý yêu cầu.

1.3 Cachable

Đây là nguyên lý nói rằng các tài nguyên (resources) trong RESTful API nên được đánh dấu là “có thể cache được” hoặc “không thể cache được”. Điều này giúp cho các client có thể lưu trữ bản sao của các tài nguyên này tại client side Có Thể Được Lưu Trữ (Cacheable):
Lợi ích
・Giảm tải cho server.
・Cải thiện hiệu suất cho client.
・Phù hợp với dữ liệu không thay đổi thường xuyên (ví dụ: danh sách sản phẩm). Không Thể Được Lưu ・Trữ (Non-Cacheable):
・Đảm bảo dữ liệu luôn cập nhật.
・Phù hợp với dữ liệu nhạy cảm hoặc thay đổi thường xuyên (ví dụ: thông tin cá nhân của người dùng).
1.4 Layered System
Hệ thống tầng của REST API bao gồm nhiều tầng tương tác với nhau để cải thiện khả năng mở rộng, bảo mật và khả năng quản lý
Proxy (Reverse Proxy):
 Giảm tải: Reverse proxy đóng vai trò như một lớp trung gian giữa người dùng (clients) và các server backend. Nó có thể phân phối tải (load balancing) giữa các server backend để cải thiện khả năng chịu tải của hệ thống.
Bảo mật (ẩn địa chỉ IP thật): Reverse proxy cũng có thể ẩn địa chỉ IP thật của các server backend, từ đó cung cấp một lớp bảo mật bổ sung và ngăn chặn các cuộc tấn công trực tiếp lên server backend.


Gateway:
 Quản lý API: API Gateway là một lớp trung gian quản lý và điều hướng các yêu cầu API từ clients đến các server backend phù hợp. Nó giúp tạo ra một giao diện đơn giản và thống nhất cho các clients sử dụng API của hệ thống.
Xác thực và ủy quyền: API Gateway thường có các chức năng xác thực và ủy quyền để kiểm tra tính hợp lệ của các yêu cầu API và quyết định liệu client có được phép truy cập hay không.


Caching Server:
 Lưu trữ tạm thời các phản hồi: Caching Server (hoặc Cache) giúp lưu trữ lại các phản hồi từ server backend sau khi đã xử lý yêu cầu từ clients. Nhờ đó, nếu có các yêu cầu tương tự từ các clients khác, hệ thống có thể trả về kết quả từ Cache mà không cần phải gửi yêu cầu tới server backend, từ đó cải thiện hiệu suất và giảm tải cho hệ thống.

1.5 Uniform Interface

Resources: Mỗi endpoint là một resource.
 Example:
 ・Endpoint: /courses
 ・Resource: Danh sách cources.

Resource ID: định danh một resource cụ thể
 Example:
 ・Endpoint: /courses/1234
 ・Resource: course với id 1234.

Output Format: có thể được chỉ định bằng Accept trên header.
 Example:
 ・Request Header: Accept: application/json
 ・Response: JSON

Thao tác tài nguyên với cùng một URI
Sử dụng HTTP methods như GET (lấy tài nguyên), POST (tạo mới), PUT (cập nhật), DELETE (xóa).

2. Thiết kế Restful API
2.1 Resource


2.2 Http methods

GET: Trả về một Resource hoặc một danh sách Resource.

POST: Tạo mới một Resource.

PUT: Cập nhật thông tin cho Resource (toàn bộ resource).

PATCH: Cật nhật thông tin cho resourse (một phần resource).

DELETE: Xoá một Resource.
2.3 HTTP Request Headers

2.4 Http status code
Các mã trạng thái HTTP cung cấp thông tin về kết quả của một yêu cầu HTTP.

2.5 Request and Response Bodies