3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostmanでTencentCloudのAPIを利用するについて

Posted at

背景

TencentCloudのAPIをPostmanで利用したい時、どのようにすればいいか悩む方はいらっしゃるかと思いますので、
この記事では、PostmanでTencentCloudのAPIを利用できる環境設定の手順を紹介します。

1.Collection Pre-request Scriptを設定する

目的:

CollectionのPre-request Scriptの中でbuild_request関数を定義します。この関数は、公式のTencent Cloudドキュメントが提供するメソッドに従って、HTTP要求ヘッダーのフィールドを生成するために使用されます。Tencent CloudのID検証がTencent Cloudのさまざまなクラウド製品にアクセスできるように、署名の生成に重点が置かれています。この関数をCollectionに追加するのはCodeの再利用も目的であるため、Collection内の各リクエストはリクエストパラメータを定義するだけで済みます。

Postmanでの設定場所:

新しくCollectionを作るか、既存のCollectionのeditで以下のキャプチャのように設定スクリプトを追加します。
image1.png
スクリプト:


pm.globals.set("TencentCloudApi", function TencentCloudApi() {
 let tencentcloudapi = {};
 function sha256_hex(msg) {
 var utf8_str = CryptoJS.enc.Utf8.parse(msg);
 var sha256_str = CryptoJS.SHA256(utf8_str);
 var sha256_hex_str = CryptoJS.enc.Hex.stringify(sha256_str);
 return sha256_hex_str;
 }
 function sign_hmac256(key, msg) {
 var utf8_str = CryptoJS.enc.Utf8.parse(msg);
 var hash_str = CryptoJS.HmacSHA256(utf8_str, key);
 return hash_str;
 }
 function sign_hmac256_hex(key, msg) {
 var utf8_str = CryptoJS.enc.Utf8.parse(msg);
 var hash_str = CryptoJS.HmacSHA256(utf8_str, key);
 var hex_str = CryptoJS.enc.Hex.stringify(hash_str);
 return hex_str;
 }
 function get_pm_env_or_global(key) {
 return (pm.environment.get(key) !== undefined)? pm.environment.get(key): pm.globals.get(key);
 }
 tencentcloudapi.build_request = function build_request(params) {
 var service = pm.environment.get("service");
 var host = service + get_pm_env_or_global("tencentcloud_endpoint");
 var region = pm.environment.get("region");
 var version = pm.environment.get("version");
 var action = request.headers["X-TC-Action"];
 var algorithm = "TC3-HMAC-SHA256";
 var timestamp = Math.round(Date.now() / 1000);
 var d = new Date();
 var date = d.toISOString().split('T')[0];
 // step 1:create canonical_request
 var http_request_method = "POST";
 var canonical_uri = "/";
 var canonical_querystring = "";
 // tencentcloud suggests to add charset=utf-8, however postman will set content-type to
 // application/json when request data format json is selected. So we don't add charset.
 //content_type = "application/json; charset=utf-8";
 var content_type = "application/json";
 var request_json_payload = JSON.stringify(params);
 var canonical_headers = "content-type:" + content_type + "\nhost:" + host + "\n";
 var signed_headers = "content-type;host";
 var hashed_request_payload = sha256_hex(request_json_payload);
 var canonical_request = http_request_method + "\n" +
 canonical_uri + "\n" +
 canonical_querystring + "\n" +
 canonical_headers + "\n" +
 signed_headers + "\n" +
 hashed_request_payload;
 //console.log('canonical_request');
 //console.log(canonical_request);
 // step 2:create signing_string
 var credential_scope = date + "/" + service + "/" + "tc3_request";
 var hashed_canonical_request = sha256_hex(canonical_request);
 var string_to_sign = algorithm + "\n" +
 timestamp.toString() + "\n" +
 credential_scope + "\n" +
 hashed_canonical_request;
 //console.log('string_to_sign');
 //console.log(string_to_sign);
 // step 3:calculate signature
 var secret_id = get_pm_env_or_global("secret_id");
 var secret_key = get_pm_env_or_global("secret_key");
 var secret_date_key = CryptoJS.enc.Utf8.parse("TC3" + secret_key);
 var secret_date = sign_hmac256(secret_date_key, date);
 var secret_service = sign_hmac256(secret_date, service);
 var secret_signing = sign_hmac256(secret_service, "tc3_request");
 var signature = sign_hmac256_hex(secret_signing, string_to_sign);
 //console.log("signature");
 //console.log(signature);
 // step 4:create authorization
 var authorization = algorithm + " " +
 "Credential=" + secret_id + "/" + credential_scope + ", " +
 "SignedHeaders=" + signed_headers + ", " +
 "Signature=" + signature;
 //console.log("authorization");
 //console.log(authorization);
 // step 5: add HTTP headers
 pm.request.headers.add("X-TC-Region:"+region);
 pm.request.headers.add("X-TC-Timestamp:"+timestamp);
 pm.request.headers.add("X-TC-Version:"+version);
 pm.request.headers.add("Authorization:"+authorization);
 pm.request.headers.add("Host:"+host);
  // step 6: set environment variables using in request
 pm.environment.set("host", host);
 pm.environment.set("request_json_payload", request_json_payload);
 };
 return tencentcloudapi;
} + 'TencentCloudApi();'
);

2.Environmentsを設定する

目的:

APIを利用する際の権限認証等の情報を設定します。

Postmanでの設定場所:

右上にあるEnviroment設定ボタンをクリックします。
image2.png
Addボタンをクリックします。
image6.png
CURRENT VALUEに以下のように情報を追加します。
(INITIAL VALUEに情報を記入する必要がありません。キャプチャは既存設定であるため自動的に記入されています。)
image5.png
追加する情報は以下となります。ここでは、LVBというライブ配信のプロダクトのAPIを例とします。

secret_id:ご自身のIDを記載してください
secret_key:ご自身のKeyを記載してください
region:ap-tokyo
service:live
tencentcloud_endpoint:.tencentcloudapi.com
version:2018-08-01

以下の情報は追加する必要はありません。すべての設定が完了すると、自動追加されます。

host
request_json_payload

これで環境設定は完了しました。次に、実際のAPIリクエストを実行してみます。

3.HTTPのリクエストBodyを設定する

先ほどCollectionのPre-requestでbuild_request関数で、リクエストのデータを環境変数のrequest_json_payloadに書き込むように設定したため、Bodyには{{request_json_payload}}のみ記載し、フォーマットをJSONに選択するだけでOKです。

以下のキャプチャをご確認ください。
image3.png

4.CreateLiveCallbackTemplateを作成する

 Pre-request ScriptでCreateLiveCallbackTemplateを作成します。
※ 上記リンクをクリックすると、TencentCloudのLVBのCreateLiveCallbackTemplateのAPIのドキュメントに飛びます。そこで、APIのリクエストパラメータ及びレスボンスパラメータを確認することができます。
image4.png

Scrpitの内容は以下となります。


var action = "CreateLiveCallbackTemplate";
pm.request.headers.add("X-TC-Action:"+action);
var params = {
 "TemplateName":"test",
 "Description":"test",
 "RecordNotifyUrl":"http://www.qq.com/api/notify?action=record",
 "CallbackKey":"testkey"
};
eval(pm.globals.get('TencentCloudApi')).build_request(params);

あと、APIのURLhttps://live.tencentcloudapi.com/を記載して実際にAPIを叩くと、以下の様にテンプレートIDが返されますので、問題なくAPIを実行できました。
image.png

これで一通りPostmanでのTencentCloud APIの実行環境及びテストが終わりました。
あと少し補足ですが、JSON形式でAPIを実行する場合、HTTP POSTでリクエストする必要があります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?