突破 Postman 無法下載離線文件!

最近我把滿多 API 記錄在 Postman 上面的,因為它要分享跟測試其實都滿方便的可以 export 分享給別人使用。如果人在外面也有線上版本的 Postman 可以直接戳就不一定需要把電腦拿出來,雖然比較難操作不過急用是可以解決問題的。

Postman 無法下載成離線文件觀看

不過最近遇到一個問題就是 Postman 雖然有網頁版的 API 文件可以直接分享 (本文以 API 101 為範例),如此連結:API 101

不過它並不支援直接下載成離線文件,不過也滿有道理的畢竟 Postman 帳號是需要付費的,當然希望大家直接線上觀看而且線上版本也還有不少好用的功能。

突破 Postman 無法下載離線文件的限制

不過我們還是會希望可以下載成離線文件畢竟在公司文件還是需要留存的,本篇就來說明如何突破這個限制

首先先開啟 Postman 以本篇範例 API 101 為主先下載它

滑鼠移過去右邊會出現三個點點,點開之後下面有一個 Export 可以點選

下載後會獲得一個 “API 101.postman_collection.json” 檔名的文件

使用 Postman To Swagger 轉換文件

選項一

再來我們開啟一個神奇的網站它可以把 Postman 轉成 Swagger 文件格式,開啟後把剛剛下載的 “API 101.postman_collection.json” 貼到上方

完成後下方就會跑出 Swagger 的 YAML 文件拉!

選項二

不想要開網頁想使用指令可以使用 postman-to-openapi 來完成它

$ npx postman-to-openapi API\ 101.postman_collection.json -f API\ 101.postman_collection.yaml
openapi: 3.0.0
info:
  title: API 101
  description: >-
    API 101 template for learning API request basics. Follow along with the
    webinar / video or just open the first request and hit **Send**!
  version: 1.0.0
servers:
  - url: https://api-101.glitch.me
  - url: http://{{apiurl}}
components:
  securitySchemes:
    apikeyAuth:
      type: http
      scheme: apikey
paths:
  /customers:
    get:
      tags:
        - default
      summary: Get all customers
      parameters:
        - name: user-id
          in: header
          schema:
            type: string
          example: '{{userId}}'
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /customer:
    get:
      tags:
        - default
      summary: Get one customer
      parameters:
        - name: user-id
          in: header
          schema:
            type: string
          example: '{{userId}}'
        - name: id
          in: query
          schema:
            type: integer
          example: '1'
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
    post:
      tags:
        - default
      summary: Add new customer
      requestBody:
        content:
          application/json:
            schema:
              type: object
              example:
                name: Dorothy Zborna
                type: Individual
      security:
        - apikeyAuth: []
      parameters:
        - name: user-id
          in: header
          schema:
            type: string
          example: '{{userId}}'
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /customer/{customer_id}:
    put:
      tags:
        - default
      summary: Update customer
      requestBody:
        content:
          application/json:
            schema:
              type: object
              example:
                name: Sophia Petrillo
                type: Individual
      security:
        - apikeyAuth: []
      parameters:
        - name: user-id
          in: header
          schema:
            type: string
          example: '{{userId}}'
        - name: customer_id
          in: path
          schema:
            type: integer
          required: true
          example: '1311'
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
    delete:
      tags:
        - default
      summary: Remove customer
      security:
        - apikeyAuth: []
      parameters:
        - name: user-id
          in: header
          schema:
            type: string
          example: '{{userId}}'
        - name: customer_id
          in: path
          schema:
            type: integer
          required: true
          example: '1310'
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}

完成後使用 Swagger Editor 檢查檔案

這時候我們可以選擇使用 Swagger Editor 編輯與觀看它,不過這不是本篇最終目的本篇是要把它轉成離線可下載的文件。

使用 Redoc CLI 轉換離線文件

最後使用 Redoc CLI 來匯出可離線觀看的 HTML 檔案,指令很簡單只要使用 npx redoc-cli bundle 就可以完成了。

$ npx redoc-cli bundle API\ 101.postman_collection.yaml
Prerendering docs

🎉 bundled successfully in: redoc-static.html (912 KiB) [⏱ 0.166s]

轉換完成就可以看到它幫我們產出美美的文件了

總結

其實做法很簡單只要使用兩條指令就可以完成了,如果不想看做法就直接使用以下吧!

$ npx postman-to-openapi API\ 101.postman_collection.json -f API\ 101.postman_collection.yaml
$ npx redoc-cli bundle API\ 101.postman_collection.yaml

參考資料