0
0
Lập trình
TT

7 Mô Hình Giả Lập API Cần Thiết Cho Quy Trình Phát Triển 2025

Đăng vào 6 tháng trước

• 5 phút đọc

Chủ đề:

#webdev#api

7 Mô Hình Giả Lập API Cần Thiết Cho Quy Trình Phát Triển 2025

Trong năm 2025, quy trình phát triển phần mềm ngày càng trở nên phức tạp với nhiều dịch vụ vi mô (micro-service) và các phụ thuộc bên ngoài. Các yêu cầu kiểm thử ngày càng cao khiến việc quản lý các điểm lỗi mạng trở nên cấp thiết hơn bao giờ hết. Để giảm thiểu thời gian kiểm thử và cải thiện độ tin cậy trong quá trình triển khai, việc sử dụng giả lập API không còn là tùy chọn nữa mà trở thành nhu cầu thiết yếu.

Dưới đây là bảy mô hình giả lập API mà các nhóm phát triển đang sử dụng để cắt giảm thời gian CI từ 20% đến 60% mà vẫn đảm bảo 100% độ bao phủ kiểm thử. Mỗi mô hình sẽ có công thức kiến trúc, công cụ hỗ trợ và liên kết đến kho GitHub công khai mà bạn có thể sao chép ngay hôm nay.

Mô Hình 1 – Giả Lập Trạng Thái Dựa Trên Đường Dẫn

Vấn Đề

Bạn cần kiểm thử mọi trạng thái HTTP mà client của bạn hứa hẹn xử lý (200, 201, 400, 401, 422, 500, 502, 504), nhưng endpoint thật sự trên staging được cài đặt cố định để trả về 200.

Giải Pháp 2025

Sử dụng một máy chủ giả lập không cần cấu hình, ánh xạ đường dẫn yêu cầu trực tiếp đến mã trạng thái mà bạn muốn.

bash Copy
# trả về 404 ngay lập tức
curl https://fakeurl.dev/404

# trễ 3 giây rồi trả về 201 với JSON tùy chỉnh
curl https://fakeurl.dev/201?delay=3000&json={"id":123}

Tại Sao Nó Quan Trọng

  • Không cần xây dựng Docker image, không cần duy trì YAML.
  • Các bài kiểm thử trở nên tự tài liệu hóa: URL chính là khẳng định.
  • Hoạt động trên bất kỳ ngôn ngữ nào—chỉ cần thay đổi hostname.

Công Cụ Hỗ Trợ

FakeURL, Beeceptor, Mocky (nhưng FakeURL là công cụ duy nhất không yêu cầu đăng ký).

Mẫu CI

yaml Copy
- name: Kiểm thử hợp đồng – bộ xử lý 404
  run: |
    export API_ROOT=https://fakeurl.dev
    pytest tests/ -k "status_code"

Mô Hình 2 – Ghi-Lặp Lại Với Keploy

Vấn Đề

Môi trường staging có dữ liệu thực, nhưng bạn không thể truy cập nó trong các bài kiểm thử đơn vị vì nó có giới hạn tần suất và có thể thay đổi.

Giải Pháp 2025

Để Keploy ghi lại lưu lượng truy cập sản xuất một lần, sau đó phát lại nó ngoại tuyến dưới dạng giả lập.

bash Copy
# khởi động keploy trong chế độ ghi
keploy record -c "go test ./..."

# đẩy thư mục .keploy vào repo; CI phát lại với
echo "keploy:test" >> docker-compose.yml

Thống Kê

Chúng tôi đã ghi lại 143 yêu cầu vào cổng thanh toán của mình. Việc phát lại đã tiết kiệm được 4 phút 20 giây cho mỗi lần CI (nhanh hơn 46%) và loại bỏ phụ thuộc bên ngoài cuối cùng.


Mô Hình 3 – Giả Lập Dựa Trên Hợp Đồng Từ OpenAPI

Tạo một giả lập sống từ YAML OpenAPI của bạn để frontend và backend có thể phát hành song song.

bash Copy
npx @openapitools/openapi-generator-cli generate \
  -i api.yaml -g wiremock -o mocks/

WireMock với cờ --watch sẽ tự động tải lại đặc tả trên mỗi lần commit, đảm bảo giả lập không bị sai lệch khỏi hợp đồng.


Mô Hình 4 – MirageJS Chỉ Duyệt Web

Hoàn hảo cho các ứng dụng SPAs React/Vue/Svelte cần trình diễn mà không cần backend.

javascript Copy
// src/server.js
import { Server } from "miragejs"
new Server({
  routes() {
    this.get("/api/users", () => [
      { id: 1, name: "Ada Lovelace" }
    ])
  }
})

Triển khai cùng một artefact build lên Vercel; "API" chạy trên trình duyệt của khách truy cập—không tốn chi phí hạ tầng.


Mô Hình 5 – Giả Lập Sidecar Trên Kubernetes

Chạy WireMock như một container sidecar trong pod của bạn để ứng dụng đang kiểm thử nghĩ rằng nó đang giao tiếp với thế giới thực.

yaml Copy
extraContainers:
- name: mock-gateway
  image: wiremock/wiremock:2.35.0
  volumeMounts:
  - name: mock-mappings
    mountPath: /home/wiremock/mappings

Bởi vì service mesh chỉ định tuyến lưu lượng giả lập bên trong namespace, staging và prod có thể chung sống trên cùng một cluster mà không va chạm.


Mô Hình 6 – Giả Lập Tiêm Chaos

Sử dụng Toxiproxy hoặc Mockintosh để thêm độ trễ, 5xx ngẫu nhiên, hoặc giới hạn băng thông để logic chịu đựng của bạn được chứng minh thay vì chỉ hy vọng.

json Copy
// mockintosh.json
"services": [{
  "name": "unreliable-inventory",
  "endpoints": [{
    "path": "/stock",
    "response": { "status": 200, "body": "{\"qty\":42}" },
    "faults": {
      "latency": 1200,
      "rate": 0.15,
      "status": 503
    }
  }]
}]

Mô Hình 7 – Hàm Giả Lập Serverless

Nếu bạn đang sống trên AWS, một Lambda duy nhất sau API Gateway cung cấp cho bạn một mô hình giả lập có thể mở rộng vô hạn mà không tốn chi phí khi không có ai kiểm thử.

javascript Copy
// mock-lambda.js
exports.handler = async (event) => {
  const status = event.pathParameters?.status || 200;
  return {
    statusCode: parseInt(status, 10),
    body: JSON.stringify({ message: "giả lập phản hồi" })
  };
};

Mô-đun Terraform trong repo sẽ khởi động nó trong 30 giây.


Tóm Tắt

  1. Chọn một mô hình loại bỏ phụ thuộc bên ngoài lớn nhất hiện tại.
  2. Sao chép mẫu hoạt động từ kho hỗ trợ.
  3. Thêm một công việc vào CI của bạn để khẳng định rằng giả lập vẫn nhanh hơn so với cuộc gọi thật (ngăn ngừa sai lệch).
  4. Khi đã ổn định, chuyển sang phụ thuộc tiếp theo.

Chúng tôi đã thực hiện đúng quy trình này tại một khách hàng fintech và xóa 9 dịch vụ staging không ổn định trong bốn tuần. Độ tin cậy của CI đã tăng từ 92% lên 99,2%, và thời gian hoàn thành trung bình của pipeline nhanh hơn 2 phút 11 giây—đủ để phát hành thêm một bản mỗi ngày.

Hãy sao chép repo, mở một PR và tag tôi khi bảng điều khiển của bạn chuyển sang màu xanh. Chúc bạn giả lập vui vẻ!


Kho chứa với tất cả các mẫu: github.com/your-org/mock-patterns-2025

Thảo luận trên Dev: @yourhandle

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào