Learning Outcome & Exercises: API Design & Security

2 câu hỏi~10 phút đọc, vài giờ làm labTừ khóa: learning outcome, Basic, Intermediate, Challenge, evidence

Tổng kết chương API Design & Security: học xong mình phải làm được gì, và làm bài tập nào để chứng minh?

Đọc hiểu chưa đủ để đi phỏng vấn. Mỗi chương kết thúc bằng những việc làm được và chứng minh được: có code chạy, có test cho cả trường hợp lỗi, có log hoặc số đo. Bài tập nằm trong repo riêng java-backend-interview-labs, thư mục labs/api.

1. Mục tiêu đầu ra

Học xong chương này, bạn tự làm được:

2. Basic: Contract-first

Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành

OpenAPI cho /orders (GET/POST/PATCH) với status code đúng; generate hoặc kiểm controller theo spec.

Bài liên quan: REST & resource contract, PUT vs PATCH, status code

Hoàn thành khi:

3. Intermediate: Idempotency key

Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành

POST /payments có Idempotency-Key; gửi 2 lần song song → 1 payment, lần 2 trả cùng response.

Bài liên quan: Error contract & idempotency

Hoàn thành khi:

4. Challenge: Versioning

Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành

Thêm v2 với field mới; contract test chứng minh client v1 vẫn chạy; trả Deprecation/Sunset header cho v1.

Bài liên quan: Versioning, OWASP API Top 10, Secrets & audit

Hoàn thành khi:

5. Tiêu chí hoàn thành chung

6. Lab và trạng thái

MứcBài tậpTrạng tháiTest / bằng chứng
BasicContract-first⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành—
IntermediateIdempotency key⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành—
ChallengeVersioning⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành—

Repo lab: java-backend-interview-labs/labs/api. TODO: link GitHub là placeholder cho tới khi repo được push.

Phỏng vấn hỏi về API Design & Security, câu nào hay gặp nhất và trả lời sao?

Q1. Làm sao để client retry POST thanh toán mà không bị trừ tiền hai lần?

🇻🇳 Tiếng Việt:

Client gửi Idempotency-Key; server lưu key cùng kết quả với ràng buộc unique, request trùng key trả lại kết quả cũ thay vì xử lý lại.

🇬🇧 English:

The client sends an Idempotency-Key; the server stores the key with the result under a unique constraint, and a repeated key returns the stored result instead of processing again.

Cách nhớ ngắn gọn


Tự kiểm tra

Bài tập Basic (Contract-first) được coi là xong khi nào?

File openapi.yaml; Test status code. Chưa có code chạy và bằng chứng thì chưa tính là xong.

Bài tập Intermediate (Idempotency key) được coi là xong khi nào?

Test song song; Body khác nhưng cùng key → 409/422. Chưa có code chạy và bằng chứng thì chưa tính là xong.

Bài tập Challenge (Versioning) được coi là xong khi nào?

Test v1 và v2 cùng pass; Danh sách thay đổi breaking/non-breaking. Chưa có code chạy và bằng chứng thì chưa tính là xong.