背景
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で以下のキャプチャのように設定スクリプトを追加します。
スクリプト:
pm.globals.set("TencentCloudApi",functionTencentCloudApi(){lettencentcloudapi={};functionsha256_hex(msg){varutf8_str=CryptoJS.enc.Utf8.parse(msg);varsha256_str=CryptoJS.SHA256(utf8_str);varsha256_hex_str=CryptoJS.enc.Hex.stringify(sha256_str);returnsha256_hex_str;}functionsign_hmac256(key,msg){varutf8_str=CryptoJS.enc.Utf8.parse(msg);varhash_str=CryptoJS.HmacSHA256(utf8_str,key);returnhash_str;}functionsign_hmac256_hex(key,msg){varutf8_str=CryptoJS.enc.Utf8.parse(msg);varhash_str=CryptoJS.HmacSHA256(utf8_str,key);varhex_str=CryptoJS.enc.Hex.stringify(hash_str);returnhex_str;}functionget_pm_env_or_global(key){return(pm.environment.get(key)!==undefined)?pm.environment.get(key):pm.globals.get(key);}tencentcloudapi.build_request=functionbuild_request(params){varservice=pm.environment.get("service");varhost=service+get_pm_env_or_global("tencentcloud_endpoint");varregion=pm.environment.get("region");varversion=pm.environment.get("version");varaction=request.headers["X-TC-Action"];varalgorithm="TC3-HMAC-SHA256";vartimestamp=Math.round(Date.now()/1000);vard=newDate();vardate=d.toISOString().split('T')[0];// step 1:create canonical_requestvarhttp_request_method="POST";varcanonical_uri="/";varcanonical_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";varcontent_type="application/json";varrequest_json_payload=JSON.stringify(params);varcanonical_headers="content-type:"+content_type+"\nhost:"+host+"\n";varsigned_headers="content-type;host";varhashed_request_payload=sha256_hex(request_json_payload);varcanonical_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_stringvarcredential_scope=date+"/"+service+"/"+"tc3_request";varhashed_canonical_request=sha256_hex(canonical_request);varstring_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 signaturevarsecret_id=get_pm_env_or_global("secret_id");varsecret_key=get_pm_env_or_global("secret_key");varsecret_date_key=CryptoJS.enc.Utf8.parse("TC3"+secret_key);varsecret_date=sign_hmac256(secret_date_key,date);varsecret_service=sign_hmac256(secret_date,service);varsecret_signing=sign_hmac256(secret_service,"tc3_request");varsignature=sign_hmac256_hex(secret_signing,string_to_sign);//console.log("signature");//console.log(signature);// step 4:create authorizationvarauthorization=algorithm+""+"Credential="+secret_id+"/"+credential_scope+", "+"SignedHeaders="+signed_headers+", "+"Signature="+signature;//console.log("authorization");//console.log(authorization);// step 5: add HTTP headerspm.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 requestpm.environment.set("host",host);pm.environment.set("request_json_payload",request_json_payload);};returntencentcloudapi;}+'TencentCloudApi();');
2.Environmentsを設定する
目的:
APIを利用する際の権限認証等の情報を設定します。
Postmanでの設定場所:
右上にあるEnviroment設定ボタンをクリックします。
Addボタンをクリックします。
CURRENT VALUEに以下のように情報を追加します。
(INITIAL VALUEに情報を記入する必要がありません。キャプチャは既存設定であるため自動的に記入されています。)
追加する情報は以下となります。ここでは、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です。
4.CreateLiveCallbackTemplateを作成する
Pre-request ScriptでCreateLiveCallbackTemplateを作成します。
※ 上記リンクをクリックすると、TencentCloudのLVBのCreateLiveCallbackTemplateのAPIのドキュメントに飛びます。そこで、APIのリクエストパラメータ及びレスボンスパラメータを確認することができます。
Scrpitの内容は以下となります。
varaction="CreateLiveCallbackTemplate";pm.request.headers.add("X-TC-Action:"+action);varparams={"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を実行できました。
これで一通りPostmanでのTencentCloud APIの実行環境及びテストが終わりました。
あと少し補足ですが、JSON形式でAPIを実行する場合、HTTP POSTでリクエストする必要があります。