教學課程:使用 Postman 簽署並提出要求
在本教學課程中,我們將設定並使用 Postman,以對使用 HTTP 的 Azure 通訊服務提出要求。 在本教學課程結束時,您將成功使用通訊服務和 Postman 傳送了簡訊。 然後,您將能夠使用 Postman 來探索 Azure 通訊服務內的其他 API。
在本教學課程中,我們將:
- 下載 Postman
- 設定 Postman 以簽署 HTTP 要求
- 對通訊服務 SMS API 提出要求以傳送訊息。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 如需詳細資訊,請參閱免費建立帳戶。 免費帳戶提供您價值 200 USD 的 Azure 點數,讓您可以試用各種服務組合。
- 作用中的 Azure 通訊服務資源和連接字串。 了解如何建立通訊服務資源。
- 可以傳送簡訊的 Azure 通訊服務電話號碼,請參閱取得電話號碼,以取得電話號碼。
下載並安裝 Postman
Postman 是一種桌面應用程式,能夠針對任何 HTTP API 提出 API 要求。 通常用於測試和探索 API。 我們將從 Postman 網站下載最新的桌面版本。 Postman 具有適用於 Windows、Mac 和 Linux 的版本,因此請下載適合您作業系統的版本。 下載後,請開啟應用程式。 此時將呈現開始畫面,要求您登入或建立 Postman 帳戶。 建立帳戶是選擇性的動作,您可以按一下 [略過並移至應用程式] 連結來略過此動作。 建立帳戶會將您的 API 要求設定儲存至 Postman,然後可讓您在其他電腦上挑選您的要求。
一旦建立了帳戶或略過了建立帳戶,您現在應該就會看到 Postman 的主視窗。
建立並設定 Postman 集合
Postman 可以透過許多方式組織要求。 基於本教學課程的目的。 我們將要建立 Postman 集合。 若要這樣做,請選取應用程式左側的集合按鈕:
一旦選取,請按一下 [建立新的集合],以啟動集合建立流程。 新的索引標籤將會在 Postman 的中心區域開啟。 將集合命名為您喜歡的任何名稱。 在這裡,集合命名為 "Azure Communication Services":
一旦建立並命名了您的集合,您就準備好對其進行設定。
新增集合變數
為了處理驗證,並更輕鬆地提出要求,我們將在新建立的通訊服務集合內指定兩個集合變數。 這些變數可供通訊服務集合內的所有要求使用。 若要開始建立變數,請瀏覽集合的變數索引標籤。
一旦在集合索引標籤上,請建立兩個變數:
- key - 此變數應該是 Azure 入口網站內 Azure 通訊服務金鑰頁面的其中一個金鑰。 例如:
oW...A==
。 - endpoint - 此變數應該是來自金鑰頁面的 Azure 通訊服務端點。 確定您移除結尾斜線。 例如:
https://contoso.communication.azure.com
。
將這些值輸入至變數畫面的 [初始值] 資料行中。 一旦輸入,請按右邊資料表正上方的 [全部保存] 按鈕。 正確設定後,Postman 畫面看起來應該像這樣:
您可以閱讀 Postman 有關變數的文件來深入了解變數。
建立預先要求指令碼
下一個步驟是在 Postman 內建立預先要求指令碼。 預先要求指令碼是在 Postman 中每個要求之前執行的指令碼,其可以代表您修改或變更要求參數。 我們將使用此指令碼來簽署 HTTP 要求,以便 Azure 通訊服務可以授權這些要求。 如需簽署需求的詳細資訊,您可以閱讀我們的驗證指南。
我們將在集合內建立此指令碼,以便其可在集合內的任何要求上執行。 若要這樣做,請在集合索引標籤內按一下 [預先要求指令碼] 子索引標籤。
在這個子索引標籤上,您可以將預先要求指令碼輸入至下列文字區域來建立此指令碼。 在完整程式碼編輯器 (例如 Visual Studio Code) 內,撰寫此指令碼可能更輕鬆,然後在完成時再將其貼入。 我們將在本教學課程中瀏覽指令碼的每個部分。 如果您只想要將其複製到 Postman 並開始使用,請隨意跳到結尾。 讓我們開始撰寫指令碼。
撰寫預先要求指令碼
我們要做的第一件事是建立國際標準時間 (UTC) 字串,並將此字串新增至 "Date" HTTP 標頭。 我們也會將此字串儲存在變數中,以便稍後在簽署時使用此字串:
// Set the Date header to our Date as a UTC String.
const dateStr = new Date().toUTCString();
pm.request.headers.upsert({key:'Date', value: dateStr});
接下來,我們將使用 SHA 256 雜湊要求本文,並將其放在 x-ms-content-sha256
標頭中。 Postman 包含一些用於全域雜湊和簽署的標準程式庫,因此我們不需要安裝這些程式庫或要求這些程式庫:
// Hash the request body using SHA256 and encode it as Base64
const hashedBodyStr = CryptoJS.SHA256(pm.request.body.raw).toString(CryptoJS.enc.Base64)
// And add that to the header x-ms-content-sha256
pm.request.headers.upsert({
key:'x-ms-content-sha256',
value: hashedBodyStr
});
現在,我們將使用先前指定的端點變數來分辨 HTTP 主機標頭的值。 我們需要這樣做,因為在處理此指令碼之前不會設定主機標頭:
// Get our previously specified endpoint variable
const endpoint = pm.variables.get('endpoint')
// Remove the https, prefix to create a suitable "Host" value
const hostStr = endpoint.replace('https://','');
建立此資訊之後,我們現在可以建立將針對 HTTP 要求簽署的字串,這是由數個先前建立的值所組成:
// This gets the part of our URL that is after the endpoint, for example in https://contoso.communication.azure.com/sms, it will get '/sms'
const url = pm.request.url.toString().replace('{{endpoint}}','');
// Construct our string which we'll sign, using various previously created values.
const stringToSign = pm.request.method + '\n' + url + '\n' + dateStr + ';' + hostStr + ';' + hashedBodyStr;
最後,我們需要使用通訊服務金鑰簽署此字串,然後將其新增至 Authorization
標頭中我們的要求:
// Decode our access key from previously created variables, into bytes from base64.
const key = CryptoJS.enc.Base64.parse(pm.variables.get('key'));
// Sign our previously calculated string with HMAC 256 and our key. Convert it to Base64.
const signature = CryptoJS.HmacSHA256(stringToSign, key).toString(CryptoJS.enc.Base64);
// Add our final signature in Base64 to the authorization header of the request.
pm.request.headers.upsert({
key:'Authorization',
value: "HMAC-SHA256 SignedHeaders=date;host;x-ms-content-sha256&Signature=" + signature
});
最終預先要求指令碼
最終預先要求指令碼應該看起來像這樣:
// Set the Date header to our Date as a UTC String.
const dateStr = new Date().toUTCString();
pm.request.headers.upsert({key:'Date', value: dateStr});
// Hash the request body using SHA256 and encode it as Base64
const hashedBodyStr = CryptoJS.SHA256(pm.request.body.raw).toString(CryptoJS.enc.Base64)
// And add that to the header x-ms-content-sha256
pm.request.headers.upsert({
key:'x-ms-content-sha256',
value: hashedBodyStr
});
// Get our previously specified endpoint variable
const endpoint = pm.variables.get('endpoint')
// Remove the https, prefix to create a suitable "Host" value
const hostStr = endpoint.replace('https://','');
// This gets the part of our URL that is after the endpoint, for example in https://contoso.communication.azure.com/sms, it will get '/sms'
const url = pm.request.url.toString().replace('{{endpoint}}','');
// Construct our string which we'll sign, using various previously created values.
const stringToSign = pm.request.method + '\n' + url + '\n' + dateStr + ';' + hostStr + ';' + hashedBodyStr;
// Decode our access key from previously created variables, into bytes from base64.
const key = CryptoJS.enc.Base64.parse(pm.variables.get('key'));
// Sign our previously calculated string with HMAC 256 and our key. Convert it to Base64.
const signature = CryptoJS.HmacSHA256(stringToSign, key).toString(CryptoJS.enc.Base64);
// Add our final signature in Base64 to the authorization header of the request.
pm.request.headers.upsert({
key:'Authorization',
value: "HMAC-SHA256 SignedHeaders=date;host;x-ms-content-sha256&Signature=" + signature
});
將此最終指令碼輸入或貼入至 [預先要求指令碼] 索引標籤內的文字區域:
一旦輸入,請按 CTRL + S 或按儲存按鈕,這會將指令碼儲存至集合。
在 Postman 中建立要求
現在一切都已設定完畢,我們準備好在 Postman 內建立通訊服務要求。 若要開始,請按一下通訊服務集合旁邊的加號 (+) 圖示:
這將會為 Postman 內我們的要求建立新的索引標籤。 建立之後,我們需要對其進行設定。 我們將針對 SMS 傳送 API 提出要求,因此請務必參閱此 API 的文件,以取得協助。 讓我們設定 Postman 的要求。
首先將要求類型設定為 POST
,並將 {{endpoint}}/sms?api-version=2021-03-07
輸入至要求 URL 欄位。 此 URL 會使用我們先前建立的 endpoint
變數,自動將其傳送至您的通訊服務資源。
現在選取要求的 [本文] 索引標籤,然後將下方的選項按鈕變更為 [原始]。 右側有一個下拉式清單顯示「文字」,將其變更為 JSON:
這將會設定要求,以 JSON 格式傳送和接收資訊。
在下方的文字區域中,您必須輸入要求本文,其應採取下列格式:
{
"from":"<Your Azure Communication Services Telephone Number>",
"message":"<The message you'd like to send>",
"smsRecipients": [
{
"to":"<The number you'd like to send the message to>"
}
]
}
針對「傳送者」值,您必須在 Azure 通訊服務入口網站中取得電話號碼,如先前所述。 輸入時不要包含任何空格,並在前面加上您的國家/地區代碼。 例如: +15555551234
。 您的「訊息」可以是您想要傳送的任何內容,但 Hello from Azure Communication Services
是一個很好的範例。 「接收者」值應該是您有權存取的手機,其可以接收簡訊。 使用您自己的行動裝置是個好主意。
一旦輸入,我們就必須將此要求儲存到我們先前建立的通訊服務集合中。 這將確保其會挑選我們先前建立的變數和預先要求指令碼。 若要這樣做,請按一下要求區域右上方的 [儲存] 按鈕。
這將會出現一個對話視窗,詢問您要如何稱呼要求,以及您要將其儲存在何處。 您可以將其命名為您喜歡的任何名稱,但請確定您在對話方塊的下半部選取您的通訊服務集合:
傳送要求
現在一切都已設定完畢,您應該能夠傳送要求,並在手機上收到簡訊。 若要這樣做,請確定已選取您建立的要求,然後按右邊的 [傳送] 按鈕:
如果一切順利,您現在應該會看到來自通訊服務的回應,這應該是 202 狀態碼:
擁有您在「接收者」值中所提供號碼的行動電話也應該收到簡訊。 您現在具有功能性 Postman 設定,可以與 Azure 通訊服務交談並傳送簡訊。
下一步
您可能也想要: