Mmaiqai.com
📜 API Testing · Chương 6 · Mục 6.3

Consumer-driven contract (khái niệm, ví dụ Pact)

🎯 Mục tiêu học: hiểu 1 bước tiến xa hơn so với Mục 6.2 — thay vì provider tự viết đặc tả rồi hy vọng đúng ý consumer, để chính consumer định nghĩa kỳ vọng của mình.

Cách hoạt động

Với OpenAPI (Mục 6.2), provider là bên viết đặc tả — rủi ro là đặc tả có thể không phản ánh đúng những gì consumer thực sự cần. Consumer-driven contract đảo ngược quy trình: consumer tự viết ra 1 file mô tả chính xác những gì mình mong đợi (request nào, response cấu trúc ra sao), rồi provider chạy test để xác nhận đáp ứng đúng file đó trước khi được phép release.

1. Consumer (vd Web App) viết 1 "pact" — mô tả: "khi tôi gọi
   GET /v1/orders/ORD1003, tôi mong đợi response có field orderId
   (string), status (string), total (number)."

2. Pact được lưu lại (thường ở 1 "Pact Broker" trung tâm).

3. Provider (Order Service), TRƯỚC KHI deploy phiên bản mới, tự động
   chạy lại toàn bộ pact đã có từ mọi consumer đang dùng API của mình.

4. Nếu provider đổi API làm vỡ 1 pact nào đó → build FAIL ngay lập tức,
   provider biết chính xác consumer nào sẽ bị ảnh hưởng trước khi release.

Lợi ích so với chỉ dùng OpenAPI

1. Phản ánh đúng nhu cầu thực tế — pact do chính consumer viết, không phải provider tự đoán.

2. Biết chính xác ai bị ảnh hưởng — khi có nhiều consumer (web, mobile app, service nội bộ khác), provider biết ngay thay đổi này làm vỡ pact của consumer nào.

3. Tích hợp trực tiếp vào CI/CD — provider không thể merge/deploy nếu làm vỡ bất kỳ pact nào đang tồn tại, biến việc "giữ tương thích" thành quy tắc bắt buộc thay vì phụ thuộc vào việc dev có nhớ đọc tài liệu hay không.

📌 Ghi nhớ

Consumer-driven contract phù hợp nhất khi hệ thống có nhiều consumer nội bộ gọi cùng 1 API (kiến trúc microservices) — với API public cho bên ngoài không kiểm soát được, cách tiếp cận OpenAPI (Mục 6.2) thường thực tế hơn.

📖 Thuật ngữ Anh–Việt (mục này)

Đề thi dùng thuật ngữ tiếng Anh — nhớ đúng cụm bên trái. Bấm 🔊 để nghe từng từ, hoặc "Đọc tất cả" để nghe lần lượt Anh → (vài giây) → Việt.

Thuật ngữ (EN)Nghĩa & ghi nhớ nhanh
Consumer-driven contractHợp đồng do bên tiêu thụ API định nghĩa, provider phải đáp ứng đúng
PactTên 1 công cụ/framework phổ biến để triển khai consumer-driven contract testing
Pact BrokerNơi lưu trữ trung tâm các pact đã được consumer và provider xác nhận

📎 Nội dung do maiqai.com biên soạn dựa trên khái niệm phổ biến của Pact/consumer-driven contract testing, không sao chép nguyên văn từ nguồn nào.