Danh sách bài tập
Đi từ Cơ bản đến Chuyên sâu. Mỗi bài có hướng dẫn curl/Postman và API thật để gọi.
Cấp 1 — Cơ bản
0 / 6 hoàn thànhLàm quen với GET, path/query param, status code và header.
GET đơn giản
Chưa làmGET · Dễ
Gọi một GET request cơ bản và kiểm tra response JSON trả về.
GET với Path Parameter
Chưa làmGET · Dễ
Truyền tham số trên đường dẫn (path param) và kiểm tra dữ liệu trả về tương ứng.
GET với Query String
Chưa làmGET · Dễ
Dùng query string (?q=&limit=) để lọc/giới hạn kết quả trả về.
Kiểm tra Status Code
Chưa làmGET · Dễ
Yêu cầu server trả về đúng mã status code bạn chỉ định, để luyện tập assert status.
Đọc Response Header tùy chỉnh
Chưa làmGET · Dễ
Server trả về các header tùy chỉnh (X-Request-Id, X-Server-Time...), hãy kiểm tra chúng.
Kiểm tra Method Not Allowed (405)
Chưa làmGET/POST/DELETE... · Dễ
Endpoint chỉ hỗ trợ GET - gọi bằng method khác để kiểm tra 405 kèm header Allow.
Cấp 2 — CRUD & Validation
0 / 6 hoàn thànhPOST/PUT/PATCH/DELETE, validate dữ liệu, phân trang.
POST tạo tài nguyên mới
Chưa làmPOST · Trung bình
Tạo một 'note' mới bằng JSON body và kiểm tra response 201 kèm dữ liệu vừa tạo.
PUT cập nhật toàn bộ
Chưa làmPUT · Trung bình
Cập nhật toàn bộ nội dung note đã tạo bằng PUT, so sánh với PATCH ở bài sau.
PATCH cập nhật một phần
Chưa làmPATCH · Trung bình
Chỉ cập nhật 1 field (ví dụ chỉ title) và kiểm tra các field khác không đổi.
DELETE xóa tài nguyên
Chưa làmDELETE · Trung bình
Xóa note và kiểm tra GET lại sẽ trả 404, xóa lần 2 cũng phải trả về hợp lý.
Validate dữ liệu đầu vào
Chưa làmPOST · Trung bình
Gửi dữ liệu thiếu field/sai kiểu để kiểm tra server trả về 400 kèm thông báo lỗi rõ ràng.
Pagination & Sorting
Chưa làmGET · Trung bình
Lấy danh sách note có phân trang (page, limit) và sắp xếp (sort).
Cấp 3 — Authentication
0 / 6 hoàn thànhBasic Auth, API Key, JWT, Refresh Token, OAuth2.
Basic Authentication
Chưa làmGET · Khó
Test endpoint yêu cầu HTTP Basic Auth với username/password cố định.
API Key Authentication
Chưa làmGET · Khó
Test endpoint yêu cầu header X-Api-Key cố định, khác với X-Practice-Token dùng để chấm bài.
Bearer Token / JWT
Chưa làmPOST + GET · Khó
Đăng nhập lấy JWT, sau đó dùng token đó để gọi API được bảo vệ (Authorization: Bearer).
Refresh Token flow
Chưa làmPOST · Khó
Dùng refreshToken để lấy accessToken mới khi accessToken hết hạn, không cần đăng nhập lại.
OAuth2 Client Credentials (mô phỏng)
Chưa làmPOST + GET · Khó
Mô phỏng luồng OAuth2 Client Credentials: đổi client_id/client_secret lấy access_token.
Phân biệt 401 vs 403
Chưa làmGET · Khó
Một endpoint yêu cầu quyền admin - phân biệt lỗi 'chưa xác thực' (401) và 'đã xác thực nhưng không đủ quyền' (403).
Cấp 4 — Nâng cao
0 / 8 hoàn thànhRate limit, idempotency, upload file, lỗi ngẫu nhiên, async job.
Rate Limiting
Chưa làmGET · Nâng cao
Gọi liên tục để kích hoạt giới hạn tần suất (429 Too Many Requests).
Idempotency Key cho POST
Chưa làmPOST · Nâng cao
Dùng header Idempotency-Key để tránh tạo trùng giao dịch khi gọi lại cùng 1 request.
Upload File (multipart/form-data)
Chưa làmPOST · Nâng cao
Upload một file bất kỳ và kiểm tra thông tin file trả về (tên, kích thước, mime type).
Xử lý lỗi ngẫu nhiên & Retry
Chưa làmGET · Nâng cao
Endpoint ngẫu nhiên trả về lỗi 500 khoảng 40% số lần gọi - luyện viết test có retry.
Async Job / Polling
Chưa làmPOST + GET · Nâng cao
Submit một 'job' xử lý bất đồng bộ, sau đó poll trạng thái tới khi hoàn tất.
ETag & 304 Not Modified
Chưa làmGET · Nâng cao
GET một tài nguyên không đổi, gửi lại header If-None-Match để nhận 304 thay vì tải lại toàn bộ dữ liệu.
Race Condition khi mua hàng giới hạn
Chưa làmPOST · Nâng cao
Kho chỉ có 3 sản phẩm - gửi nhiều request MUA cùng lúc để phát hiện lỗi bán vượt tồn kho (oversell).
Boundary Value Testing
Chưa làmPOST · Nâng cao
Đặt hàng với số lượng ở các giá trị biên (0, âm, thập phân, vượt max) để luyện kỹ thuật boundary value analysis.
Cấp 5 — Chuyên sâu
0 / 6 hoàn thànhWebhook, CORS, versioning API.
Webhook + xác thực chữ ký HMAC
Chưa làmPOST + GET · Chuyên sâu
Đăng ký nhận webhook (không cần công cụ ngoài - hệ thống tự tạo hộp thư giả lập), rồi kiểm tra chữ ký HMAC.
CORS (Cross-Origin Resource Sharing)
Chưa làmOPTIONS + GET · Chuyên sâu
Kiểm tra preflight request (OPTIONS) và các header Access-Control-* trả về.
API Versioning (v1 vs v2)
Chưa làmGET · Chuyên sâu
So sánh cùng một resource nhưng 2 phiên bản API trả về cấu trúc dữ liệu khác nhau.
Broken Object Level Authorization (IDOR)
Chưa làmGET · Chuyên sâu
Đổi số ID trên URL để xem dữ liệu riêng tư của TÀI KHOẢN NGƯỜI KHÁC - lỗi #1 trong OWASP API Security Top 10.
Mass Assignment - tự nâng quyền qua request body
Chưa làmPATCH · Chuyên sâu
Endpoint chỉ nên cho sửa email/phone, nhưng gán thẳng toàn bộ body vào dữ liệu nội bộ - thử thêm field 'role'.
Excessive Data Exposure
Chưa làmGET · Chuyên sâu
API 'danh bạ nội bộ' đáng lẽ chỉ nên trả tên hiển thị, nhưng lại trả nguyên dữ liệu riêng tư của TẤT CẢ mọi người.