Lesson 53 — Mini-project: REST API Blog

Dự án cuối Tier 4: một REST API blog hoàn chỉnh bằng thuần stdlib Go — xác thực JWT, CRUD users/posts, chuỗi middleware (log, recover, rate limit, CORS), validation và định dạng lỗi chuẩn RFC 7807. Ba module dưới đây mô phỏng tương tác để bạn "thấy" kiến trúc và luồng request hoạt động ra sao.

1. Kiến trúc phân lớp — bấm vào từng lớp

API được chia thành các lớp tách bạch. Mỗi lớp chỉ phụ thuộc lớp ngay dưới nó (qua interface), nên đổi storage từ in-memory sang Postgres không đụng tới handler/service.

Middleware

internal/middleware

Handler

users / posts handler.go

Service

users / posts service.go

Storage

internal/storage

Auth

internal/auth
Bấm vào một lớp để xem vai trò của nó.

2. Luồng xử lý một request

Request đi xuyên từng lớp từ ngoài vào trong, rồi response đi ngược ra. Chọn một kịch bản rồi bấm Chạy để xem từng bước sáng lên.

Sẵn sàng.
Thứ tự middleware (ngoài → trong): Recover → Logger → CORS → RateLimit → router. Recover ngoài cùng để bắt được panic của mọi lớp.

3. Luồng xác thực: register → login → JWT → endpoint bảo vệ

Mô phỏng vòng đời token. Nhập mật khẩu rồi bấm lần lượt các bước; xem token JWT được tạo, giải mã và dùng để truy cập route bảo vệ.

1. Register
2. Hash + lưu
3. Login
4. Cấp JWT
5. GET /users/me
Bấm "Đăng ký" để bắt đầu.
JWT gồm 3 phần ngăn bởi dấu chấm: header.payload.signature. Chữ ký = HMAC-SHA256(header.payload, secret) — sửa payload mà không có secret thì chữ ký không khớp → bị từ chối.