HTTP
1. Các mô hình backend
1.1. Client server
Client (browser, mobile app)
↓ request
Server (backend app)
↓
Database
- client gửi request, server xử lý logic trả về response
- Stateless: mỗi request độc lập
1.2. 3-Tier Architecture
Presentation Layer (UI)
↓
Application Layer (Business logic)
↓
Data Layer (Database)
-
Presentation layer: giao diện (frontend):
- Là nơi người dùng tương tác: web UI, mobile app, desktop app.
- Gửi request HTTP đến backend.
- Hiển thị kết quả từ backend (HTML, JSON, View Model…).
- Business logic layer: xử lý nghiệp vụ (validation, rule, transaction):
- Tầng này nằm trong backend.
- Xử lý toàn bộ logic nghiệp vụ: Validate dữ liệu, Tính toán, xử lý rule, Gọi repository để truy vấn DB
- Ví dụ trong Spring Boot: các class @Service, @Controller.
- Data access layer: đọc/ghi dữ liệu từ DB:
- Là nơi giao tiếp với database hoặc external storage.
- Chịu trách nhiệm lưu, truy xuất, chuyển đổi dữ liệu.
- Ví dụ: @Repository trong Spring, DAO trong Java, ORM trong Laravel/Express.
1.3. N-Tier Architecture
-
Giống 3-tier, nhưng chia nhiều tầng hơn nếu hệ thống lớn:
- API layer
- Authentication layer
- Business service layer
- Data access layer
- Caching layer
1.4. Microservices Architecture
[User Service] [Order Service] [Payment Service]
↓ ↓ ↓
DB1 DB2 DB3
- Mỗi service có DB riêng → không phụ thuộc nhau
- Giao tiếp bằng REST API, gRPC, Kafka, RabbitMQ…
- Triển khai độc lập, scale từng phần được
1.5. Serverless Architecture
- Không có “server backend” cố định; bạn chỉ viết các function xử lý (lambda function) chạy khi có event.
Client → API Gateway → Lambda Function → Database
- Dùng trong: ứng dụng nhỏ, hệ thống event-driven.
1.6. Event-driven Architecture
- Các service không gọi trực tiếp nhau, mà gửi “sự kiện” (event). Ví dụ: khi “UserCreated” → gửi event → “EmailService” nhận và gửi email.
- Ưu điểm: giảm coupling, dễ mở rộng
- Nhược điểm: khó trace flow, cần hiểu rõ message queue
1.7. Microfrontend + Backend-for-Frontend (BFF)
- Dành cho hệ thống có nhiều frontend (web, mobile, admin…).
- Mỗi loại client sẽ có backend riêng (BFF) để trả đúng dữ liệu cần thiết.
- Dùng trong: hệ thống có nhiều UI khác nhau.
Khi bạn gõ facebook.com rồi nhấn Enter, chuyện gì xảy ra trong 1 giây đó?
2. HTTP
# Cấu trúc 1 http request
GET /api/users HTTP/1.1 ← Status line
Host: example.com ← Header
Authorization: Bearer <token> ← Body
# Cấu trúc 1 response
HTTP/1.1 200 OK ← Status line
Content-Type: application/json ← Header
Body: {"id":1,"name":"Anh"} ← Body
- Status line: gồm method, path, protocol hoặc các status code
- Headers: Metadata của request/ response
request
- Content-Type: kiểu dữ liệu gửi đi (JSON, XML, HTML, form-data…)
- Authorization: token đăng nhập
- Accept: client mong muốn nhận kiểu dữ liệu nào (JSON, HTML…)
response
- Content-Type: kiểu dữ liệu trả về
- Set-Cookie: gửi cookie mới cho client
- Cache-Control: hướng dẫn cache
- Body: Phần dữ liệu chính (payload) hoặc Dữ liệu thật trả về (HTML, JSON, XML, v.v.)
- Header và Body khác nhau ở điểm nào?
- Khi nào dùng POST thay vì GET?
2.1. Status code & RESTful API
- Vì sao REST API nên stateless?
- /api/users/1/orders diễn tả điều gì?
2.2. Header, cookie, session
- Nếu HTTP là stateless, tại sao ta vẫn “nhớ đăng nhập”?
- Token và cookie khác gì nhau?
2.3. Routing và Endpoint
- Controller có nhiệm vụ gì trong backend?
- Tại sao ta cần chia nhỏ endpoint?
2.4. Câu hỏi tổng hợp
- Response 201 khác gì 200?
- Vì sao server trả về JSON chứ không phải HTML?
- RESTful API là gì?
- Stateless có nghĩa là gì?
- Khi bạn gửi request, những phần nào của HTTP được gửi đi?
- Header dùng để làm gì?