場景
通過上一節的學習我們掌握瞭如何生成併發布接口文檔,可是現實總是殘酷的。前端團隊往往不滿足於乾巴巴的接口文檔,他們需要對接真實的數據,但這樣很受限於後端開發進度,於是便有了Mock(模擬)這種東西,也就是我們平時常說的“造 假數據”。Mock並不是Postman先提出的,在沒接觸Postman之前,不少前端團還是有一些自己熟悉的Mock工具。大多數情況下,mock都是由前端團隊來驅動完成的。
利用Postman的Mock Server功能,我們可以把現成的請求模擬數據。前端請求Mock的接口地址,就能返回我們預先模擬好的數據,而不依賴於後端的開發進度。同時,還能解決在家遠程辦公而無法連接公司內網服務問題,以及開發初期由於服務不穩定引起的其他問題。
實戰
看過不少介紹Postman Mock的相關文章,它們大多數都使用創建好的集合和請求示例來Mock,而忽略了通過新建API的這種方式來Mock接口,並沒有把Mock的一些基本概念講清楚。
Postman提供的Mock Server方式有兩種:
- 新建API
- 使用工作區的集合
我們先通過新建API的方式讓大家對Mock的概念有個基本的理解。
方式一:新建API
- 點擊Postman主窗口左上角的
New
,選擇Mock Server
。在彈出的新窗口中,我們可以看到有兩種創建方式,默認選擇的是第一種Create a new API
。中間有個類似表格一樣的東西,有請求方法、請求路徑、響應碼、響應體這幾項,也就是說,一個標準的mock須包含以上幾項。
我們先填寫一個API:請求方法是GET,請求路徑是test,響應碼是200,響應體是ok。值得注意的是,請求路徑前面爲什麼加了個{{url}}/
?這是因爲Postman匹配路徑的時候會忽略掉前面協議和域名這一塊,而域名之後的部分纔是我們所關心的。
- 填完API,點下一步。我們的mock名字就叫
test_mock
吧。先別勾選Make this mock server private
,這個我後面會解釋。完成後點創建,你會得到一個Postman分配給的網址,這個網址是以mock.pstmn.io
域名結尾的,這個就是對於剛纔創建的API對應的mock地址。
如果你不小心關掉沒保存下來也沒關係,你會發現左側多了一個集合,Postman自動爲我們剛纔填寫的API創建了一個同名的新集合。集合裏包含一個請求,請求裏包含一個示例,點開發現全是我們剛纔填寫的內容。我們點集合三角形展開詳細面板,選擇Mocks
選項卡,就可以找回剛纔分配的mock地址了。不僅如此,還自動創建了一個同名的環境變量,裏面包含一個url的值,正是我們剛剛分配的mock地址。
- 我們打開Postman爲我們自動創建的那個請求
test
,運行環境選擇自動創建的test_mock
(即你剛纔填寫的mock名稱),直接點運行,返回結果正是我們剛纔填入的ok
值。把鼠標移動請求地址的{{url}}
上,發現被替換成真正的mock地址。我們通過Code功能把請求地址拷貝到瀏覽器請求一下,發現返回結果還是我們想要的。至此,你已經成功學會了如何mock,而且對mock的概念有了基本的理解。
- 再講多一點,我們在地址欄後面加上
/1
,最終變成{{url}}/test/1
,再請求一次會有什麼變化?如果把test
變成test1
,結果又是怎樣呢?大家可以試試。其實這裏涉及到了Mock Server的匹配算法,我們不會展開來講,先簡單理解爲支持模糊匹配,並返回最接近的請求示例響應。
方式二:使用集合
-
先創建一個集合,在集合裏創建一些請求,爲請求添加一個示例。如果不懂的可以先看上一節關於請求示例的添加
注意:示例創建之後可以修改。一個請求可以包含多個示例,只會返回最符合要求的示例響應。 -
爲該集合添加Mock。點擊左側集合旁邊的三角形,展開詳情面板。選擇
Mocks
選項卡,點擊Add a mock
進入打開添加窗口。操作方法跟上面一樣,只不過不需要手動填mock名稱,完成後同樣會得到一個mock地址。至於如何使用上面已經提過了,這裏不再贅述。
私有mock server
- 在創建mock的界面,有一項是
Make this mock server private
。不勾選的話,我們的mock地址公佈出去,誰都可以訪問,會造成不必要的麻煩。我們重新生成一個mock server,這次勾選設爲私有。 - 打開 https://go.pstmn.io/pro-api-keys ,點擊
Get API key
生成一個密鑰,名字可以叫使用者的名字方便管理。這裏可以看到我們所有生成的key,可以禁用或刪除。
注意:生成的api key並不是專門用於mock server,還可以用於Postman提供的其他服務中。
- 如果我們直接請求會返回沒有訪問權限,這就對了,因爲我們還差最後一步。在請求的頭部加入
x-api-key
,再次請求即可正常返回數據。當然,這個api key我們正常應該寫在全局變量裏,比較好維護。