1. 引言
大家在呼叫第三方介面時,通常都會得到ClientID
和 SecretKey
,然後再通過簽名後才能請求第三方介面。那麼,在僅僅使用Postman的情況下,能否完成這樣繁瑣的簽名操作呢?答案是肯定的。接下來讓我們一起了解Postman的強大之處。
2. 服務端
首先我們看看下圖服務端的校驗邏輯:
細心的朋友可能會發現,這裡我只獲取了請求中的Sign和Timestamp,而MasterKey是直接從配置中獲取。本文重點討論Postman的介面簽名,所以簡化了服務端的邏輯。需要了解介面簽名設計的可以自行搜尋學習,本文不做闡述。
這裡我們可以看到介面請求中需要包含x-sign
和x-timestamp
,簽名規則為 MD5(${masterKey}.${timestamp}) 瞭解到介面驗證規則後,我們可以繼續往後走。
3. 構造請求
咳咳,接下來到本文重點。首先看看Postman的主介面:
為了方便後續的測試,我們先把Host和MasterKey新增到環境變數中:
緊接著我們把請求方式、介面地址、請求Body依次填寫完整:
好了,內容都填好後,我們要往Headers裡填寫x-sign
和x-timestamp
:
現在問題來了,正常情況下我們需要在Headers裡面填寫固定的內容。但是現在我們要填寫的x-sign
和x-timestamp
是需要計算出來的。無法直接填寫,怎麼辦?
在解決這個問題之前,我需要補充一些知識點。讓我們先來了解一下Postman的工作流程:
Postman每發起一個請求之前,都可以選擇執行一段pre-request script。這恰恰給了我們機會在請求發起之前生成我們需要的資料。閒話少說,我們開啟Postman中的pre-request script皮膚:
這裡需要補充一下,pre-request script僅支援JavaScript語法。有了這個強大的功能,我們回過頭來梳理下我們要做的事情:生成x-sign
和x-timestamp
。我們把任務分解成更小的步驟:
- 獲取MasterKey
- 獲得當前時間戳
- 計算MD5簽名值
- 將時間戳和簽名值填充到Headers
第一步非常簡單,還記得剛才我們把MasterKey放到哪裡了嗎?沒錯,我們在一開始就把MasterKey放到了環境變數裡,而皮膚的右側有一個Snippet:Get an environment variable
,點選後即可得到獲取環境變數的語句,我們稍加修改就變成這樣:
第二步也不難,我們利用Date.now()生成當前時間戳:
接著我們繼續下一步。咦,計算MD5???JavaScript並沒有提供現成的計算函式,怎麼辦?Postman早就考慮到了這點,所以內建了一系列常用的庫:
現在我們可以利用CryptoJS這個庫來完成計算MD5值:
接著,我們在變數中新增sign
和timestamp
:
最後,我們在headers中新增{{timestamp}}和{{sign}}:
4. 驗證結果
我們將寫好的請求發出,並在服務端斷點,看看是否能獲取到x-sign
和x-timestamp
,並且對比計算出的sign是否一致:
簽名結果一致,校驗成功!
5. 總結
Postman是一個非常強大的介面工具,就像他說的那句話一樣:
Postman Makes API Development Simple.
而我們也學習到如何在介面請求發起之前進行一些邏輯操作並且修改請求頭的內容。順帶還給前端的同學粗略地瞭解後端的介面簽名設計是如何工作的。後續我還會繼續挖掘Postman的一些好玩的技巧,幫助大家更好的利用Postman來提高效率。