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ác bộ sưu tập Postman dần bị lệch so với đặc tả OpenAPI của bạn theo thời gian. Tìm hiểu cách phương pháp luận ưu tiên đặc tả (spec-first) khắc phục nguyên nhân gốc rễ thay vì chỉ vá các triệu chứng.

Ashley Innocent

Ashley Innocent

5 tháng 6 2026

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

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

Câu hỏi về Postman Collections so với OpenAPI Spec xuất hiện mỗi khi một nhóm phát triển vượt quá vài kỹ sư. Bạn mở collection mình đã viết 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à một định dạng phản hồi không còn khớp với những gì máy chủ thực sự trả về. OpenAPI spec trong Git lại nói một điều khác. Giao diện Swagger UI của bạn lại hiển thị một điều khác nữa. Không ai chắc chắn cái nào đúng.

Sự sai lệch đó không phải là lỗi công cụ. Đó là lỗi quy trình làm việc, và sự phân biệt này rất quan trọng. Postman là một công cụ tuyệt vời để thực thi yêu cầu, viết script và kiểm thử thăm dò. Vấn đề là khi các nhóm coi collection như một hợp đồng API, thay vì chỉ là một thành phần được tạo ra từ hợp đồng đó.

💡
Một khi bạn đảo ngược sự phụ thuộc đó, và để spec tạo ra collection thay vì ngược lại, sự sai lệch sẽ dừng lại. Apidog kết nối quy trình làm việc theo hướng spec này với khả năng cộng tác, tạo mock, kiểm thử và CI/CD, giúp nhóm của bạn làm việc từ cùng một nguồn. Bài viết này sẽ hướng dẫn cách thực hiện sự đảo ngược đó mà không phải loại bỏ mọi thứ nhóm của bạn đã xây dựng trong Postman.
Tải xuống

Tại sao các collection lại sai lệch ngay từ đầu

Một Postman collection là một thành phần ưu tiên yêu cầu. Bạn gửi một yêu cầu, quan sát phản hồi và lưu nó lại. Theo thời gian, bạn thêm các script tiền yêu cầu, thay thế biến, xác nhận kiểm thử và cấu trúc thư mục phản ánh cách nhóm của bạn nghĩ về API, chứ không nhất thiết là những gì API chính thức quy định.

Ngược lại, OpenAPI spec của bạn là một thành phần ưu tiên hợp đồng. Nó khai báo các đường dẫn, tham số, schema và loại phản hồi dưới định dạng máy đọc được mà các công cụ có thể xác thực, tạo mock và tạo mã từ đó.

Hai thành phần này trả lời các câu hỏi khác nhau. Collection trả lời "làm thế nào để tôi gọi endpoint này hôm nay?" Spec trả lời "API này được cho là làm gì?" Khi các nhóm duy trì cả hai một cách độc lập, chúng chắc chắn sẽ khác biệt. Một nhà phát triển cập nhật spec khi hợp nhất một pull request. Một người khác cập nhật collection khi họ nhận thấy một bài kiểm thử bị lỗi. Không ai hợp nhất chúng. Trong vòng vài tháng, bạn có hai mô tả không hoàn toàn chính xác về cùng một API, và không có cách đáng tin cậy để biết cái nào mới hơn.

Bằng chứng từ khách hàng về mô hình này rất rõ ràng. Inventis Korea đã báo cáo chính xác vấn đề này: nhóm của họ đã xây dựng một API, tạo OpenAPI spec cho Swagger, nhập collection vào Postman để kiểm thử, và sau đó tốn công sức liên tục để giữ ba đại diện này đồng bộ. Các bài kiểm thử đã bỏ sót các trường hợp biên vì collection không phản ánh đầy đủ schema. Tài liệu bị sai lệch vì spec không phải là đầu vào để tạo kiểm thử. Đây không phải là các trường hợp hiếm gặp; chúng là những kết quả có thể dự đoán được của một quy trình làm việc ưu tiên yêu cầu ở quy mô lớn.

Nguyên nhân gốc rễ: Postman không được thiết kế để trở thành một kho lưu trữ spec

Postman collections có định dạng riêng. Schema Postman collection là một cấu trúc JSON độc quyền mô tả các yêu cầu, script và cấu trúc thư mục. Nó không phải là OpenAPI. Postman có thể nhập và xuất OpenAPI, nhưng việc chuyển đổi sẽ bị mất mát ở cả hai chiều: OpenAPI sang collection bỏ qua các chi tiết schema không thể biểu thị dưới dạng yêu cầu; collection sang OpenAPI bỏ qua các script và dữ liệu không thể biểu thị dưới dạng trường spec.

Đây không phải là một lời chỉ trích Postman. Đây là mô tả về mục đích thực sự của công cụ. Postman là một trình chạy yêu cầu với các tính năng cộng tác được xây dựng xung quanh mô hình tập trung vào yêu cầu. Việc sử dụng nó làm mô tả API chính thức của bạn đòi hỏi bạn phải áp đặt cấu trúc mà định dạng này không được thiết kế để mang.

So sánh hai cách biểu diễn cho một endpoint duy nhất:

Thuộc tính Postman collection OpenAPI spec
Tham số yêu cầu Lưu dưới dạng cặp khóa-giá trị với mô tả tùy chọn Được định kiểu, xác thực, với các trường required và schema
Định dạng phản hồi Được ghi lại dưới dạng ví dụ đã lưu (tùy chọn) Được định nghĩa là JSON Schema với việc tái sử dụng $ref trên các đường dẫn
Phản hồi lỗi Thêm thủ công cho mỗi yêu cầu Liệt kê trong responses với components/schemas được chia sẻ
Tái sử dụng schema Không có; sao chép-dán giữa các yêu cầu $ref đến components/schemas được thực thi bởi các trình xác thực
Hợp đồng máy đọc được Không Có; công cụ có thể tạo máy chủ, client, mock
Thân thiện với Git diff JSON với các ID không rõ ràng; khó xem xét có ý nghĩa YAML; các diff cấp dòng có ý nghĩa
Kiểm tra cú pháp và xác thực Không ở định dạng gốc Spectral, Redocly CLI và các công cụ khác

Bảng cho thấy tại sao sự sai lệch xảy ra: collection không thể thể hiện đầy đủ hợp đồng, vì vậy hợp đồng tồn tại ở nơi khác, và hai cái mất đồng bộ ngay khi ai đó chỉnh sửa một cái mà không chỉnh sửa cái còn lại.

Ý nghĩa thực sự của "spec-first" đối với một nhóm Postman

Spec-first không có nghĩa là "thiết kế mọi thứ trong YAML trước khi viết bất kỳ đoạn mã nào". Đối với hầu hết các nhóm chuyển từ quy trình làm việc tập trung vào collection, nó có nghĩa là đảo ngược sự phụ thuộc. Phương pháp spec-first đặt tài liệu OpenAPI vào Git làm mô tả có thẩm quyền về API. Mọi thành phần khác, bao gồm collection bạn sử dụng để kiểm thử, đều được tạo ra từ tài liệu đó, chứ không phải ngược lại.

Trong thực tế, quy trình làm việc trông như thế này:

  1. Spec được commit vào Git và được xem xét như một phần của quy trình PR.
  2. Các bài kiểm thử, mock và tài liệu được tạo ra từ spec.
  3. Khi API thay đổi, spec thay đổi trước tiên. Các thành phần phụ thuộc (downstream artifacts) sẽ tự động cập nhật hoặc thông qua các công cụ.
  4. Collection mà nhóm của bạn sử dụng để kiểm thử thăm dò được tạo ra từ spec, vì vậy nó luôn phản ánh hợp đồng hiện tại.

Collection vẫn còn đó. Các script, kiểm thử dựa trên dữ liệu và biến môi trường của bạn vẫn còn đó. Sự khác biệt là collection phụ thuộc vào spec (downstream of the spec), chứ không phải ngược lại (upstream of it). Khi một trường mới xuất hiện trong spec, nó sẽ xuất hiện trong collection được tạo ra. Khi một trường bị xóa khỏi spec, bài kiểm thử sẽ thất bại vì yêu cầu được tạo ra không còn bao gồm nó. Sự sai lệch trở thành lỗi CI, chứ không phải là một phát hiện sau sáu tháng.

Cách tạo collection từ spec của bạn

Có một số cách để tạo một collection tương thích với Postman từ OpenAPI spec. Dưới đây là một cách hoạt động với Redocly CLI:

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

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

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

# Convert to Postman collection v2.1 using the openapi-to-postmanv2 library
npm install -g openapi-to-postmanv2

openapi2postmanv2 \
  --spec dist/petstore-bundled.yaml \
  --output dist/petstore-collection.json \
  --prettyPrint

Đầu ra là một JSON Postman collection tiêu chuẩn. Bạn nhập nó vào Postman hoặc sử dụng nó làm collection cơ sở trong Newman hoặc Postman CLI. Các script tiền yêu cầu và biến môi trường của bạn vẫn là các tệp riêng biệt mà bạn duy trì độc lập; chúng không bị ghi đè khi bạn tạo lại collection từ một spec đã cập nhật.

Bạn có thể tích hợp điều này vào CI để collection luôn được tạo lại từ spec trước khi chạy các bài kiểm thử:

# .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: |
          redocly bundle openapi/petstore.yaml -o dist/petstore-bundled.yaml
          openapi2postmanv2 \
            --spec dist/petstore-bundled.yaml \
            --output dist/petstore-collection.json

      - name: Run tests against generated collection
        run: |
          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/

Với mô hình này, spec là đầu vào cho mỗi lần chạy kiểm thử. Một thay đổi trong spec làm hỏng một bài kiểm thử sẽ được phát hiện trong cùng PR đã thay đổi spec đó.

Apidog phù hợp với quy trình làm việc này ở đâu

Giá trị của Apidog không phải là nó thay thế Postman như một trình chạy yêu cầu. Mà là nó kết nối OpenAPI spec với mọi thành phần khác mà nhóm của bạn làm việc cùng, mà không cần bước chuyển đổi thủ công. Spec trong Git vẫn là nguồn sự thật; Apidog là lớp cộng tác và thực thi trên đó.

Chế độ Spec-First của Apidog (hiện đang trong giai đoạn beta) cho phép bạn đồng bộ hóa OpenAPI spec từ một kho lưu trữ Git trực tiếp vào không gian làm việc của Apidog. Từ spec đã đồng bộ đó, bạn sẽ có các mock tự động tạo, tài liệu tương tác và các kịch bản kiểm thử, tất cả đều được cập nhật tự động khi spec thay đổi trong Git. Bạn không cần duy trì một collection riêng biệt bên cạnh spec; spec sẽ điều khiển những gì Apidog hiển thị và thực thi.

Điều này quan trọng đối với các nhóm gặp phải tình trạng mà STC Group và Diễn đàn Kinh tế Thế giới đã mô tả: duy trì Postman để kiểm thử, một công cụ tài liệu riêng biệt để hiển thị spec, và một máy chủ mock cho phát triển frontend, ba hệ thống đều cần phản ánh cùng một hợp đồng API. Khi spec thay đổi, bạn cập nhật nó ở một nơi và cả ba bề mặt đều cập nhật. Đáng để kiểm tra trong bản dùng thử xem quyền truy cập không gian làm việc và độ chi tiết của SSO của Apidog có đáp ứng các yêu cầu kiểm soát truy cập cụ thể của bạn hay không, đặc biệt đối với các nhóm lớn như triển khai của DHL được mô tả (hơn 100 người dùng). Đó là những câu hỏi đánh giá có ý nghĩa cho một bằng chứng khái niệm.

Đối với lộ trình di chuyển, bạn có thể chuyển đổi các Postman collection hiện có của mình sang Apidog làm điểm khởi đầu, sau đó biến spec thành tài liệu chính thức từ đó về sau. Bước nhập tự động được trình bày chi tiết trong hướng dẫn được liên kết.

Coi spec như mã trong quy trình làm việc Git của bạn

Cách tiếp cận api-spec-as-code có nghĩa là tài liệu OpenAPI được xử lý giống như mã ứng dụng: pull request, xem xét mã, kiểm tra cú pháp trong CI và thẻ phiên bản tại các ranh giới phát hành. Hầu hết các nhóm đều thấy rằng họ đã có cơ sở hạ tầng cho việc này; bước còn thiếu là áp dụng nó cho tệp spec.

Một vài thực tiễn hữu ích:

Cách tiếp cận này được trình bày chi tiết trong hướng dẫn quy trình làm việc API gốc Git nếu bạn muốn thiết lập từng bước cho một dự án mới.

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

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

Không. Thay đổi về phương pháp luận là về hướng phụ thuộc, chứ không phải thay thế công cụ. Bạn có thể tiếp tục sử dụng Postman để kiểm thử thăm dò và viết script. Sự khác biệt là collection của bạn được tạo ra từ spec trước mỗi lần chạy kiểm thử, thay vì được duy trì như một thành phần riêng biệt. Nếu nhóm của bạn thích giao diện người dùng của Postman cho công việc thăm dò, sở thích đó vẫn tương thích với quy trình làm việc ưu tiên spec.

Điều gì xảy ra với các script và biến môi trường Postman hiện có của chúng tôi?

Các script tiền yêu cầu, script kiểm thử và định nghĩa biến môi trường của bạn không phải là một phần của collection được tạo ra. Chúng là các tệp riêng biệt mà bạn duy trì độc lập. Khi bạn tạo lại collection từ một spec đã cập nhật, các script sẽ không bị ghi đè. Bạn giữ lớp hành vi (script) trong khi lớp cấu trúc (định nghĩa yêu cầu) luôn được tạo ra từ spec.

Làm thế nào để tôi xử lý các endpoint chưa có trong spec?

Trong quy trình làm việc ưu tiên spec, một endpoint không có trong spec thì chưa sẵn sàng để kiểm thử. Điều đó nghe có vẻ nghiêm ngặt, nhưng đó là mấu chốt: cổng spec đảm bảo rằng các endpoint mới được mô tả chính thức trước khi viết các bài kiểm thử cho chúng. Đối với phát triển thăm dò, bạn có thể làm việc với một stub cục bộ và thêm mục spec như một phần của PR giới thiệu endpoint. Tham khảo hướng dẫn các công cụ xác thực OpenAPI tốt nhất để tìm các công cụ giúp bước chỉnh sửa ưu tiên spec nhanh hơn.

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

Chế độ Spec-First của Apidog hiện đang trong giai đoạn beta. Bạn có thể truy cập nó thông qua Apidog và đánh giá xem quy trình làm việc đồng bộ Git, hỗ trợ nhánh và các mock tự động tạo có đáp ứng yêu cầu của nhóm bạn hay không. Giống như bất kỳ tính năng beta nào, đáng để kiểm thử với cấu trúc spec cụ thể của bạn trước khi cam kết sử dụng nó như một quy trình làm việc sản xuất.

Sự khác biệt giữa điều này và việc nhập spec của tôi vào Postman là gì?

Postman có thể nhập một OpenAPI spec và tạo một collection từ đó. Đó là một chuyển đổi một lần. Collection sau đó được duy trì độc lập với spec, vì vậy sự sai lệch sẽ tiếp tục ngay lập tức. Một quy trình làm việc ưu tiên spec sẽ tạo lại collection từ spec trong mỗi lần chạy CI (hoặc đồng bộ hóa), vì vậy collection không bao giờ lỗi thời quá một bản build so với spec.

Kết luận

Vấn đề sai lệch mà nhóm của bạn đang gặp phải không phải là một lỗi trong Postman. Đó là kết quả có thể dự đoán được của việc duy trì hai mô tả API chồng chéo một phần mà không có sự phụ thuộc rõ ràng giữa chúng. Giải pháp là thiết lập OpenAPI spec trong Git làm nguồn có thẩm quyền, và coi Postman collection như một thành phần được tạo ra phụ thuộc vào spec đó.

Sự đảo ngược đó thay đổi những gì bị hỏng và khi nào. Các thay đổi spec làm hỏng kiểm thử sẽ bị phát hiện trong PR đã tạo ra chúng. Tài liệu, mock và kịch bản kiểm thử vẫn đồng bộ vì tất cả đều đọc từ cùng một nguồn. Gánh nặng bảo trì để giữ hai hệ thống đồng bộ biến mất vì chỉ có một hệ thống.

Tải xuống Apidog và mở không gian làm việc Chế độ Spec-First với OpenAPI spec hiện có của bạn. Nếu bạn bắt đầu từ một collection thay vì một spec, bạn có thể nhập collection đó làm điểm khởi đầu OpenAPI và sau đó tiếp tục làm việc theo hướng spec từ đó. Quy trình làm việc đồng bộ Git trở nên rõ ràng hơn khi bạn thấy nó chạy trên API của chính mình, thay vì một ví dụ phức tạp.

Tải xuống

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API