DEV Community

Cover image for Bộ sưu tập Postman không phải Nguồn dữ liệu đáng tin cậy? Cách khắc phục
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Bộ sưu tập Postman không phải Nguồn dữ liệu đáng tin cậy? Cách khắc phục

Câu hỏi về Postman Collections so với OpenAPI Spec thường xuất hiện khi một nhóm phát triển bắt đầu mở rộng. Bạn mở lại collection đã tạo sáu tháng trước và thấy nó mô tả một endpoint hiện đã có thêm ba trường bắt buộc, hai tham số lỗi thời và response format không còn khớp với server. Trong khi đó, OpenAPI spec trong Git lại nói một điều khác. Swagger UI hiển thị một phiên bản khác nữa. Không ai chắc chắn đâu là nguồn đúng.

Dùng thử Apidog hôm nay

Sự sai lệch đó không phải là lỗi của công cụ. Đó là lỗi quy trình. Postman rất tốt để gửi request, viết script và kiểm thử thăm dò. Vấn đề bắt đầu khi nhóm coi collection như hợp đồng API, thay vì coi nó là artifact được tạo ra từ hợp đồng đó.

💡 Khi đảo chiều phụ thuộc — để OpenAPI spec tạo ra collection thay vì duy trì collection như nguồn chính — drift sẽ giảm mạnh. Apidog hỗ trợ quy trình spec-first với cộng tác, mock, kiểm thử và CI/CD để nhóm làm việc từ cùng một nguồn sự thật.

Vì sao Postman collection dễ bị sai lệch

Postman collection là artifact ưu tiên request. Bạn gửi request, xem response, lưu lại, rồi thêm pre-request script, biến môi trường, test assertion và folder structure.

OpenAPI spec thì khác. Nó là artifact ưu tiên hợp đồng. Nó khai báo path, parameter, schema, response type và các ràng buộc dưới dạng máy đọc được để công cụ có thể validate, mock, tạo tài liệu hoặc sinh code.

So sánh Postman collection và OpenAPI spec

Hai artifact này trả lời hai câu hỏi khác nhau:

  • Collection: “Làm thế nào để gọi endpoint này hôm nay?”
  • Spec: “API này được định nghĩa chính thức như thế nào?”

Khi nhóm duy trì cả hai độc lập, chúng sẽ lệch nhau. Một developer cập nhật spec trong pull request. Người khác sửa collection khi test fail. Không có cơ chế bắt buộc hai bên đồng bộ. Sau vài tháng, bạn có hai mô tả không hoàn toàn đúng về cùng một API.

Đây là vấn đề phổ biến ở các nhóm scale lớn: spec dùng cho Swagger, collection dùng cho test, tài liệu dùng cho người đọc, mock server dùng cho frontend. Nếu tất cả không được tạo từ cùng một nguồn, drift là điều gần như chắc chắn.

Nguyên nhân gốc: Postman không phải kho lưu trữ spec

Postman collection có format riêng. Schema Postman collection là JSON mô tả request, script và folder. Nó không phải OpenAPI.

Postman có thể import/export OpenAPI, nhưng quá trình chuyển đổi không hoàn toàn tương đương:

  • OpenAPI → collection: nhiều chi tiết schema không thể biểu diễn đầy đủ dưới dạng request.
  • Collection → OpenAPI: script, environment behavior và dữ liệu runtime không thể biểu diễn đầy đủ trong spec.

Điều này không làm Postman “sai”. Nó chỉ cho thấy Postman được thiết kế như request runner, không phải hệ thống quản lý hợp đồng API.

Thuộc tính Postman collection OpenAPI spec
Tham số request Key-value với mô tả tùy chọn Có type, required, schema, validation
Response format Ví dụ response được lưu thủ công JSON Schema, có thể tái sử dụng bằng $ref
Error response Thêm thủ công cho từng request Khai báo trong responsescomponents/schemas
Tái sử dụng schema Thường copy-paste giữa request Dùng $ref đến shared schema
Hợp đồng máy đọc được Không đầy đủ
Git diff JSON nhiều ID khó review YAML/JSON có diff rõ hơn
Lint/validation Không phải trọng tâm chính Hỗ trợ bởi Spectral, Redocly CLI, v.v.

Kết luận thực tế: collection không thể thay thế hoàn toàn API contract. Vì vậy, hãy để OpenAPI spec là nguồn chính và tạo collection từ spec.

Spec-first có nghĩa là gì với nhóm đang dùng Postman

Spec-first không bắt buộc bạn phải viết toàn bộ YAML trước khi code. Với nhóm đang dùng Postman, spec-first chủ yếu là đổi hướng phụ thuộc.

Thay vì:

Postman collection → tài liệu / test / mock
Enter fullscreen mode Exit fullscreen mode

hãy chuyển thành:

OpenAPI spec trong Git → collection / tài liệu / mock / test
Enter fullscreen mode Exit fullscreen mode

Phương pháp spec-first đặt OpenAPI spec trong Git làm mô tả có thẩm quyền của API. Mọi artifact khác được sinh ra hoặc đồng bộ từ spec đó.

Quy trình spec-first

Quy trình triển khai tối thiểu:

  1. Commit OpenAPI spec vào Git.
  2. Review thay đổi spec trong cùng pull request với code.
  3. Lint spec trong CI.
  4. Generate Postman collection từ spec.
  5. Chạy test bằng collection được generate.
  6. Không sửa collection thủ công như nguồn chính.

Collection vẫn có thể tồn tại. Bạn vẫn có thể dùng Postman cho exploratory testing. Điểm khác biệt là collection trở thành artifact downstream, không phải nguồn sự thật.

Cách tạo Postman collection từ OpenAPI spec

Bạn có thể dùng Redocly CLI để lint/bundle spec, sau đó dùng openapi-to-postmanv2 để tạo collection.

# Install Redocly CLI
npm install -g @redocly/cli

# Validate the spec first
redocly lint openapi/petstore.yaml

# Bundle the spec and resolve $ref chains
redocly bundle openapi/petstore.yaml -o dist/petstore-bundled.yaml

# Install converter
npm install -g openapi-to-postmanv2

# Convert OpenAPI to Postman collection v2.1
openapi2postmanv2 \
  --spec dist/petstore-bundled.yaml \
  --output dist/petstore-collection.json \
  --prettyPrint
Enter fullscreen mode Exit fullscreen mode

Kết quả là file JSON Postman collection chuẩn:

dist/petstore-collection.json
Enter fullscreen mode Exit fullscreen mode

Bạn có thể:

  • import file này vào Postman;
  • chạy bằng Newman;
  • chạy bằng Postman CLI;
  • dùng làm collection base cho test pipeline.

Các script và environment hiện có nên được tách riêng thành file riêng. Khi generate lại collection từ spec, bạn không ghi đè phần behavior đang được quản lý riêng.

Chạy collection được generate trong GitHub Actions

Ví dụ workflow CI:

# .github/workflows/api-tests.yml
name: API contract tests

on:
  push:
    paths:
      - "openapi/**"
      - "src/**"

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install dependencies
        run: |
          npm install -g @redocly/cli openapi-to-postmanv2 newman

      - name: Validate OpenAPI spec
        run: redocly lint openapi/petstore.yaml

      - name: Generate collection from spec
        run: |
          mkdir -p dist
          redocly bundle openapi/petstore.yaml -o dist/petstore-bundled.yaml
          openapi2postmanv2 \
            --spec dist/petstore-bundled.yaml \
            --output dist/petstore-collection.json \
            --prettyPrint

      - name: Run tests against generated collection
        run: |
          mkdir -p results
          newman run dist/petstore-collection.json \
            --environment config/env-staging.json \
            --reporters cli,junit \
            --reporter-junit-export results/test-results.xml

      - name: Upload test results
        uses: actions/upload-artifact@v4
        with:
          name: test-results
          path: results/
Enter fullscreen mode Exit fullscreen mode

Với mô hình này, mỗi lần chạy test đều bắt đầu từ spec mới nhất. Nếu thay đổi spec làm hỏng test, lỗi xuất hiện ngay trong PR liên quan.

Apidog nằm ở đâu trong quy trình này

Apidog không nhất thiết thay thế Postman như request runner. Giá trị chính là kết nối OpenAPI spec với các phần còn lại của workflow: cộng tác, mock, tài liệu, test và CI/CD.

Chế độ Spec-First của Apidog hiện đang trong giai đoạn beta. Chế độ này cho phép đồng bộ OpenAPI spec từ Git repository vào workspace Apidog. Từ spec đã đồng bộ, bạn có thể tạo:

  • mock API;
  • tài liệu tương tác;
  • test scenario;
  • workflow cộng tác quanh cùng một API contract.

Điểm quan trọng: spec trong Git vẫn là nguồn sự thật. Apidog hoạt động như lớp cộng tác và thực thi trên nguồn đó.

Nếu nhóm của bạn đang duy trì Postman cho test, công cụ tài liệu riêng cho Swagger/OpenAPI và mock server riêng cho frontend, mô hình spec-first giúp giảm số nơi cần cập nhật. Khi spec đổi, các bề mặt downstream được cập nhật từ cùng một contract.

Nếu bắt đầu từ Postman collection hiện có, bạn có thể chuyển đổi Postman collection và environment sang Apidog, rồi dần chuyển nguồn chính sang OpenAPI spec.

Coi OpenAPI spec như code

Cách tiếp cận api-spec-as-code nghĩa là OpenAPI spec được xử lý giống code ứng dụng:

  • có pull request;
  • có review;
  • có lint trong CI;
  • có version tag;
  • có breaking-change check nếu cần.

Một setup thực tế:

repo/
├── src/
├── openapi/
│   └── petstore.yaml
├── config/
│   └── env-staging.json
└── .github/
    └── workflows/
        └── api-tests.yml
Enter fullscreen mode Exit fullscreen mode

Các thực tiễn nên áp dụng:

  • Lưu spec trong cùng repository với service mà nó mô tả.
  • Lint spec bằng Spectral hoặc Redocly CLI.
  • Validate spec theo đặc tả OpenAPI.
  • Review thay đổi spec cùng với code thay đổi API.
  • Gắn tag version cho spec tại ranh giới release.
  • Với consumer downstream, tham chiếu một version cụ thể thay vì main.

Ví dụ dùng Spectral:

npm install -g @stoplight/spectral-cli

spectral lint openapi/petstore.yaml
Enter fullscreen mode Exit fullscreen mode

Ví dụ GitHub Actions tối thiểu:

name: Lint OpenAPI

on:
  pull_request:
    paths:
      - "openapi/**"

jobs:
  lint:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install Spectral
        run: npm install -g @stoplight/spectral-cli

      - name: Lint spec
        run: spectral lint openapi/petstore.yaml
Enter fullscreen mode Exit fullscreen mode

Bạn có thể xem thêm hướng dẫn quy trình làm việc API gốc Git để thiết lập từng bước cho dự án mới.

Checklist triển khai spec-first cho nhóm đang dùng Postman

Dùng checklist này để chuyển đổi mà không cần bỏ toàn bộ workflow hiện tại:

  1. Chọn nguồn sự thật

    • Chọn OpenAPI spec trong Git làm nguồn chính.
    • Không dùng collection thủ công làm contract chính thức.
  2. Đưa spec vào repository

    • Đặt trong openapi/.
    • Review trong PR cùng với code.
  3. Thêm lint vào CI

    • Dùng Redocly CLI hoặc Spectral.
    • Fail build nếu spec không hợp lệ.
  4. Generate collection từ spec

    • Dùng openapi-to-postmanv2.
    • Không commit collection nếu có thể generate lại trong CI.
  5. Tách environment và script

    • Environment file: config/env-staging.json.
    • Test script/pre-request logic: quản lý riêng nếu cần.
  6. Chạy Newman/Postman CLI

    • Test luôn dùng collection mới generate.
    • Kết quả test được upload thành artifact.
  7. Đồng bộ tài liệu/mock

    • Tạo tài liệu và mock từ cùng spec.
    • Tránh sửa tài liệu thủ công tách biệt khỏi spec.

Câu hỏi thường gặp

Tôi có phải ngừng dùng Postman hoàn toàn không?

Không. Thay đổi nằm ở hướng phụ thuộc, không phải bắt buộc đổi công cụ. Bạn vẫn có thể dùng Postman để exploratory testing và debug request. Chỉ cần đảm bảo collection chính được tạo từ OpenAPI spec, không duy trì thủ công như API contract.

Script và biến môi trường Postman hiện có thì sao?

Pre-request script, test script và environment variable nên được quản lý riêng với collection được generate. Khi tạo lại collection từ spec, phần cấu trúc request được cập nhật, còn behavior script có thể được giữ trong file riêng hoặc workflow riêng.

Endpoint chưa có trong spec thì xử lý thế nào?

Trong workflow spec-first, endpoint chưa có trong spec nghĩa là chưa sẵn sàng để trở thành API chính thức. Khi thêm endpoint mới, hãy cập nhật spec trong cùng PR với code. Nếu cần thử nghiệm cục bộ, bạn có thể dùng stub tạm thời, nhưng endpoint nên được đưa vào spec trước khi merge.

Bạn có thể tham khảo các công cụ xác thực OpenAPI tốt nhất để tăng tốc bước chỉnh sửa và validate spec.

Chế độ Spec-First của Apidog đã sẵn sàng chưa?

Chế độ Spec-First của Apidog hiện đang trong giai đoạn beta. Bạn có thể truy cập qua Apidog và kiểm thử với spec thực tế của nhóm, đặc biệt nếu bạn cần Git sync, branch support và mock tự động.

Khác gì với việc import OpenAPI spec vào Postman?

Import spec vào Postman thường là chuyển đổi một lần. Sau đó collection lại được chỉnh sửa độc lập, nên drift vẫn xuất hiện.

Workflow spec-first tạo lại hoặc đồng bộ collection từ spec liên tục, ví dụ trong mỗi lần chạy CI. Collection vì vậy không bị lỗi thời quá một build so với spec.

Kết luận

Vấn đề drift giữa Postman collection và OpenAPI spec không phải lỗi của Postman. Nó là kết quả của việc duy trì hai mô tả API chồng chéo mà không có quan hệ phụ thuộc rõ ràng.

Cách xử lý bền vững:

OpenAPI spec trong Git = nguồn sự thật
Postman collection = artifact được tạo ra
Test/mock/docs = downstream từ spec
Enter fullscreen mode Exit fullscreen mode

Khi đổi sang mô hình này, lỗi spec, lỗi test và lỗi tài liệu xuất hiện sớm hơn — ngay trong PR — thay vì sau nhiều tháng. Nhóm không cần đồng bộ thủ công nhiều hệ thống vì tất cả đều đọc từ cùng một hợp đồng API.

Tải xuống Apidog và thử mở workspace Spec-First với OpenAPI spec hiện có của bạn. Nếu đang bắt đầu từ Postman collection, hãy import collection làm điểm khởi đầu, sau đó chuyển dần sang workflow spec-first.

Top comments (0)