主頁 > 後端開發 > Postman 進階技巧

Postman 進階技巧

2023-01-04 07:10:29 後端開發

大多數開發者可能都用過 Postman,根據其官網的介紹:Postman 是一個用于構建和使用 API 的 API 平臺,簡化了 API 生命周期的每個步驟,提供更便捷的團隊協作,因此可以更快地創建更好的 API,這里的 API,除了我們常用的 HTTP API 之外,還包括 Websocket(BETA),gRPC,本文中,我們將以最常用的 REST API 作為例子,

假設我們在開發一個類似微博的專案,你是一個后端開發人員,前端分為手機端和網頁端,而由于采用了 RAD 或者敏捷開發方法,你隨時需要將在開發環境測驗好的最新的 API 改動發布至測驗環境(或 Stage 環境),并為測驗人員或者前端開發人員提供最新的 API 檔案,下面我們看看在這個程序中,Postman 能如何幫助簡化 API 宣告周期以及提供更便捷的團隊協作,

開發階段

在這個階段,不管后端使用什么語言開發,最終開放的是 REST API 介面,在本文的示例中,我們使用 Jmix 框架開發基于服務的 REST API,Postman 的最基本用法,就是開發人員可以在這一步建立一個 API 集合(Collection),其中包含專案的所有 API,這里我們創建了一個叫 Corp 的集合,包含所有功能的 API:

單個請求

圖中重要的三個部分:

  1. API 集合
  2. 單個 API 的請求方式(POST)和請求地址
  3. 單個 API 請求體

到這一步為止,就是 Postman 的基礎用法了,我們創建一個 API 集合,而集合是支持匯出的,可以匯出為 JSON 檔案,再發給其他同事,他們可以匯入到 Postman 里面使用,

使用變數做第一次優化

在上面的圖中,我們展示了集合中的第一個介面 - 獲取 Jmix 本地 token,而這個 token,我們需要在以后的每個請求中都用來做用戶認證,如下圖:

請求認證

這里有一個問題,就是 token 會過期,比如我們今天拿到的 token,可能明天就沒法再次使用了,而我們需要再次獲取 token,然后挨個復制到每個請求中嗎?這個未免太麻煩了,Postman 提供了環境變數的機制,有三種型別的變數,分別是:

  1. 全域變數(Globals):顧名思義,這里定義的變數在所有集合的所有 API 中都可使用,
  2. 集合變數:在集合中,有一個 Variables 標簽頁,可以定義集合級別的變數,這些變數,只能用于集合內的 API,
  3. 環境變數:需要建立一個環境變數的集合,這里面可以定義一組該環境內的變數,可以用在任何集合,后面我們會說到用法,

Postman 變數定義

我們可以宣告一個名為 jmixToken 的集合變數存盤 token,至然后在請求中使用 {{jmixToken}} 的方式參考變數即可:

token 存盤

除了 token 之外,我們在 API 中使用的相同型別的引數也都可以宣告為變數,而變數可以用在請求的任何部分,例如,我們在發新帖的 API 中使用的請求體如下,我們分別使用了 Postman 提供的隨機生成 UUID 的 $guid 變數、集合中存盤測驗用戶 Id 的 userId 變數,以及存盤我們博客地址 https://blog.abmcode.comblogUrl

{
    "postId":"{{$guid}}",
    "userId":"{{userId}}",
    "content":"歡迎訪問:{{blogUrl}}"
}

使用腳本進行第二次優化

經過了上面的第一輪優化后,我們的 API 里面會多了許多變數,但是還存在一個問題,就是我們在拿到 token 后,仍然需要手動更新一下 jmixToken 這個變數,否則各個 API 仍然使用的是過期的 token,這還是有點麻煩,

好在 Postman 提供了測驗腳本的功能,可以解決這個小麻煩,我們需要在獲取 token 的請求中撰寫一個測驗腳本,用于更新 jmixToken,這樣我們一旦重新獲取了 token,就可以保證其他 API 使用的是最新的 token,

撰寫代碼的位置如下圖所示,在 API 的 Tests 標簽頁,并且更貼心的是,Postman 在右側給了一些常用的代碼片段,點擊即可使用,例如,獲取全域變數、設定集合變數等,

測驗腳本

測驗腳本是 JavaScript 的,可能需要有一點 JS 基礎,具體每行的作用,請參考注釋,這里我們對回傳結果做了兩個測驗,分別是驗證 HTTP 狀態碼必須是 200 以及檢測回傳結果中必須包含 access_token 這個屬性,需要注意的是,這兩個測驗如果有任意一個失敗,都將拋出例外直接退出 JS 的執行,此時不會走最后一句設定變數的陳述句:

// pm.test 表示這是一個測驗,
pm.test("Set Global variable jmixToken", function () {
    // 測驗 1 - 回傳狀態碼為 200
    pm.response.to.have.status(200);
    // 獲取回傳結果的 json
    var jsonData = https://www.cnblogs.com/abmcode/archive/2023/01/03/pm.response.json();
    // 測驗 2 - 回傳的 json 中必須有 access_token 欄位
    pm.expect(jsonData).to.have.property('access_token');
    // 設定全域變數 jmixToken
    pm.globals.set("jmixToken", jsonData.access_token);
})

這里我們還可以做一點優化,那就是針對上面代碼中的 “測驗 1”,我們檢查了 HTTP 的回傳狀態碼為 200,其實針對所有的請求,我們可能都需要做這個檢查,那么如果不復制粘貼代碼,有沒有簡化的方法呢?

有的,Postman 提供了集合級別的測驗腳本,定義在集合中的測驗腳本,會對每個 API 都適用,比如,我們可以把驗證 HTTP 狀態碼的測驗放到集合中:

集合測驗腳本

小結

到這里,我們開發階段對于請求的優化就結束了,通過使用變數,可以優化 API 中的資料,將相同的資料都定義在變數中,通過測驗腳本,我們可以對 API 進行測驗,也可以更新各種變數,避免手動修改的麻煩,我們的示例中演示的更新 token 是最常見的腳本功能,除此之外,比方說我們要測驗的發帖和回帖功能,可以在發帖后將帖子的 ID 保存在變數中,測驗回帖功能時,直接使用變數存盤的帖子 ID,這些具體的業務場景,可以根據專案靈活變化,

測驗階段

開發完成后,我們就需要將 API 部署至測驗或者 Stage 環境,交給測驗人員或者前端開發人員進行試集成了,那么在這個階段,你或許想在測驗人員作業前自己先測驗一遍,或者如果測驗有問題,而你作為后臺開發人員,也難免需要直接呼叫測驗環境的 API 觀察輸出結果,這就有了一個新的問題:我們在之前的介面定義都是 http://localhost:8080 開頭的地址,怎么能方便地切換到測驗地址呢?

答案還是用變數,但是這一次,我們使用的是環境變數集合,

例如,我們可以創建兩套環境變數,分別為 env_devenv_prod,其中都定義了變數 jmixAppUrl,在 env_dev 中,該變數的值為 http://localhost:8080,而在 env_prod 中,該變數的值為 https://your.test.env.ip:test_port,然后修改每個請求,將原本的 http://localhost:8080 地址換成變數 {{jmixAppUrl}}

環境變數集合

使用時,通過右上角的環境變數集合切換功能,就可以切換不同的環境了,

發布檔案

如果你的測驗或者前端也使用 Postman,那么可能匯出 API 集合檔案再交由同事匯入,可能是比較方便的方法,但其實 Postman 在檔案發布這個功能上,也做了不少作業,

右鍵點擊集合,有一個 View documentation 選單,或者通過下圖的按鈕也可以查看集合的檔案

集合檔案

在查看檔案時,右上角有一個 Publish 按鈕,可以將你的檔案公開發布,并提供一個 URL 地址用于訪問,這樣的話,其他同事如果不使用 Postman,只需要訪問該地址,就可以看到 API 的檔案,

發布檔案

在發布時,可以選擇環境變數集合,這樣會用集合內的變數值直接替換 API 中的所有變數,這樣一來,看檔案的人不會讀到看不懂的變數,下圖是一個發布的檔案示例,前端用戶還可以根據編程語言,選擇對應的代碼樣例:

發布的檔案

發布后的檔案會實時更新,也就是說,任何你在 Postman 中對集合 API 的修改都會實時同步至檔案中,比如新增或洗掉某個 API、修改 API 請求體等等,

專案級別優化

其實,我們最后還做了一個專案級別的優化,這個案例可能不具有通用性,但是也可以給大家一個思路:

公共 API 抽離

由于我們的專案后臺都是基于 Jmix/CUBA 框架開發的,因此,我們做了如下改動:

  1. 新建 Postman 集合 - Jmix/CUBA 通用介面,其中包含了 Jmix 和 CUBA 各自獲取本地 token 的 API,以及從我們 SSO IDP 獲取 token 的 API,
  2. 新建全域變數存盤 token,全域變數有 jmixTokencubaTokenssoToken,并且在上述三個介面的測驗腳本中,分別更新這三個全域變數,

這樣做的好處是,不需要在每個專案中單獨提供獲取 token 的 API,并能保證獲取的 token 全域可用,

統一添加 Authorization 請求頭

在業務 API 集合中,我們為 Collection 添加了 Pre-request Script,這個腳本會在集合內的每個請求發出前先執行,我們就是用這個腳本為請求添加請求頭,代碼很簡單,例如,對于使用 ssoTokenjmixToken 的 Jmix 專案,我們是這樣做的:

請求頭腳本

因此,對于集合內的每個請求,不需要單獨設定 Authorization 請求頭了,

統一業務 API 回傳結構

最后,我們在代碼層面對每個業務 API 的回傳結構做了統一,都使用這樣的回傳結構:

public class RestResult<T extends Serializable> implements Serializable {
    /**
     * 業務狀態碼
     */
    private int businessCode;

    /**
     * 提示資訊
     */
    private String msg;

    /**
     * 資料
     */
    private T data;
    //...
}

我們為所有的成功回傳都定義了同一個 businessCode,這樣的話,在 Postman 的 Tests 腳本中,可以添加代碼直接檢查業務層面的回傳結果是否成功,例如,我們定義 10000 為業務結果正確的回傳值:

pm.test("Success return", function () {
    pm.response.to.have.status(200);
    pm.expect(pm.response.json().businessCode).to.eql(10000);
})

結語

本文介紹了一些使用免費 Postman 的進階技巧:變數、腳本、檔案發布,而現在 Postman 也在往 SaaS 方向發展,推出了團隊協作功能,像檔案發布、API 匯出匯入這些功能在團隊模式下用不到了,因為 API 集合可以協作完成,檔案也可以團隊內共享,Postman 作為一款 API 平臺,確實能在一定程度上提升團隊的開發效率和協作,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541096.html

標籤:其他

上一篇:三臺服務器使用docker搭建redis一主二從三哨兵,概念-搭建-整合springboot

下一篇:密碼加密,天經地義

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more