Postman除錯技巧之介面簽名

島民不會抓魚發表於2018-07-11

1. 引言

大家在呼叫第三方介面時,通常都會得到ClientIDSecretKey ,然後再通過簽名後才能請求第三方介面。那麼,在僅僅使用Postman的情況下,能否完成這樣繁瑣的簽名操作呢?答案是肯定的。接下來讓我們一起了解Postman的強大之處。

2. 服務端

首先我們看看下圖服務端的校驗邏輯:

Postman除錯技巧之介面簽名

細心的朋友可能會發現,這裡我只獲取了請求中的Sign和Timestamp,而MasterKey是直接從配置中獲取。本文重點討論Postman的介面簽名,所以簡化了服務端的邏輯。需要了解介面簽名設計的可以自行搜尋學習,本文不做闡述。

這裡我們可以看到介面請求中需要包含x-signx-timestamp,簽名規則為 MD5(${masterKey}.${timestamp}) 瞭解到介面驗證規則後,我們可以繼續往後走。

3. 構造請求

咳咳,接下來到本文重點。首先看看Postman的主介面:

Postman除錯技巧之介面簽名

為了方便後續的測試,我們先把Host和MasterKey新增到環境變數中:

Postman除錯技巧之介面簽名

緊接著我們把請求方式、介面地址、請求Body依次填寫完整:

Postman除錯技巧之介面簽名

好了,內容都填好後,我們要往Headers裡填寫x-signx-timestamp:

Postman除錯技巧之介面簽名

現在問題來了,正常情況下我們需要在Headers裡面填寫固定的內容。但是現在我們要填寫的x-signx-timestamp是需要計算出來的。無法直接填寫,怎麼辦?

在解決這個問題之前,我需要補充一些知識點。讓我們先來了解一下Postman的工作流程:

Postman除錯技巧之介面簽名

Postman每發起一個請求之前,都可以選擇執行一段pre-request script。這恰恰給了我們機會在請求發起之前生成我們需要的資料。閒話少說,我們開啟Postman中的pre-request script皮膚:

Postman除錯技巧之介面簽名

這裡需要補充一下,pre-request script僅支援JavaScript語法。有了這個強大的功能,我們回過頭來梳理下我們要做的事情:生成x-signx-timestamp。我們把任務分解成更小的步驟:

  1. 獲取MasterKey
  2. 獲得當前時間戳
  3. 計算MD5簽名值
  4. 將時間戳和簽名值填充到Headers

第一步非常簡單,還記得剛才我們把MasterKey放到哪裡了嗎?沒錯,我們在一開始就把MasterKey放到了環境變數裡,而皮膚的右側有一個Snippet:Get an environment variable,點選後即可得到獲取環境變數的語句,我們稍加修改就變成這樣:

Postman除錯技巧之介面簽名

第二步也不難,我們利用Date.now()生成當前時間戳:

Postman除錯技巧之介面簽名

接著我們繼續下一步。咦,計算MD5???JavaScript並沒有提供現成的計算函式,怎麼辦?Postman早就考慮到了這點,所以內建了一系列常用的庫:

Postman除錯技巧之介面簽名

現在我們可以利用CryptoJS這個庫來完成計算MD5值:

Postman除錯技巧之介面簽名

接著,我們在變數中新增signtimestamp

Postman除錯技巧之介面簽名

最後,我們在headers中新增{{timestamp}}和{{sign}}:

Postman除錯技巧之介面簽名

4. 驗證結果

我們將寫好的請求發出,並在服務端斷點,看看是否能獲取到x-signx-timestamp,並且對比計算出的sign是否一致:

Postman除錯技巧之介面簽名

簽名結果一致,校驗成功!

5. 總結

Postman是一個非常強大的介面工具,就像他說的那句話一樣:

Postman Makes API Development Simple.

而我們也學習到如何在介面請求發起之前進行一些邏輯操作並且修改請求頭的內容。順帶還給前端的同學粗略地瞭解後端的介面簽名設計是如何工作的。後續我還會繼續挖掘Postman的一些好玩的技巧,幫助大家更好的利用Postman來提高效率。


相關文章