騰訊云 API 3.0實踐分享

日期:2018-12-25 12:57 / 人氣:174 / 來源:騰訊云服務器

產品的每次更新迭代都意味著一種提升和進步,API的升級也如此。此次API的升級帶來的價值是巨大的,簡單總結如下:

  • 第一,API3.0版本高并發和多地域就近接入的能力,極大降低了用戶訪問時延。
  • 第二,API3.0版本更加統一規范而且詳細的接口文檔和錯誤碼描述,更加方便用戶使用騰訊云所有產品以及降低用戶定位問題的門檻。

雖然說API升級了會帶來了好處,但的確也會因為其和2.0的差異,使得用戶在切換到3.0時不知道如何使用,本文將以 CVM 的 API 為例,分享一些實際的例子(Python 語言),從例子中學會 API 3.0的正確使用姿勢。

1、SDK 和 API

為方便開發者調試和接入騰訊云產品 API,騰訊云提供了不同語言版本的 SDK 。在此,我也建議用戶盡可能使用 SDK,各語言版本的 SDK 可以在騰訊云 SDK 中心下載。

然而這里有個注意事項,以 CVM 的 API 為例,在 API 文檔中的輸入參數部分,您會看到 Version 是必選參數。如果您使用 SDK 的話, CvmClient的時候已經默認傳好 Version,則不需要將 Version 作為必選參數進行傳參了。

2、輸入參數

從 API 文檔中可以看到,輸入參數的數據類型會有很多中,比如String、Integer、Array of String、Array of Object 以及 Object。其中 String 和 Integer 比較容易理解,我則不例舉例子了。而是以創建 CVM為例分別對另外三種輸入參數類型舉例講解。

Array of String

示例代碼:

request.SecurityGroupIds = ['sg-ivobypxx','sg-ivobypyy']

Array of Object

DataDisks 的數據結構為:

06.jpg

示例代碼:

request.DataDisks = [{'DiskType':'LOCAL_BASIC','DiskSize':50},{'DiskType':'CLOUD_BASIC','DiskSize':500}]

Object(簡單)

Placement 的數據結構為:

示例代碼:

request.Placement = {'Zone':'ap-beijing-2','ProjectId':1048443,'HostIds'['host-cy8swiou']}

Object(復雜)

VirtualPrivateCloud 的數據結構為:

示例代碼:

request.VirtualPrivateCloud = {'VpcId': 'vpc-d1it25j4','SubnetId':'subnet-9hwkfmm3','PrivateIpAddresses':["192.168.2.10","192.168.2.11"]}

上述分別是不用參數類型的傳參例子,下面是完整的一個示例:

返回的結果如下:

控制臺的結果如下:

3、Filters 的使用

本小節以查看實例列表對 Filters 的使用進行個示例講解。

Filter 的數據結構為:

示例代碼:

返回結果如下:

4、CLI 的使用

除了提供 SDK ,騰訊云還提供了好用的騰訊云命令行工具(TCCLI),該命令行工具的使用是非常簡單的,我這里就不舉例說明了,詳情可查看官網文檔。

然后這里需要提醒大家的是,注意windows和linux操作系統的區別,在拼接字符串的時候windows下可能需要使用轉義符。

linux 示例代碼:

tccli cvm DescribeInstances  --Filters '[{"Name":"private-ip-address","Values":["172.16.0.12"]}]'

windows 示例代碼:

tccli cvm DescribeInstances  --Filters "[{\"Name\":\"private-ip-address\",\"Values\":[\"172.16.0.12\"]}]"

最后,再補充個小 tips,使用 CLI 可以對返回結果進行過濾哦。

例1,只看某個字段:

tccli cvm DescribeZones  --filter TotalCount

例2,只看指定某個數組類型對象的第N個子對象的信息:

tccli cvm DescribeZones  --filter ZoneSet[0]

更多高級用法請參考官方文檔

5、例子延伸

在上面已經以創建 CVM 為例提供了一個樣例, 但仔細點的話則會發現上面的一些參數的值是我直接寫上去了,比如ImageId 和 InstanceType 以及 SecurityGroupIds 等。但是其實也是需要調用額外的 API 來獲取的,下面我將分享一個完整的例子(獲取一個CentOS 7.4 64操作系統的鏡像),希望對大家在真正使用 API 的時候有所啟發。

def DescribeImage(Region, secretId, secretKey):
    cred = credential.Credential(secretId, secretKey)
    client = cvm_client.CvmClient(cred, Region)
    request = models.DescribeImagesRequest()
    respFilter = models.Filter()
    respFilter.Name = "image-type"
    respFilter.Values = ['PUBLIC_IMAGE']
    request.Filters = [respFilter]
    result = client.DescribeImages(request)
    result_srt = result.to_json_string()
    result_dic = json.loads(result_srt)
    return {'result': True, 'data': result_dic}
def RunInstance(Region, secretId, secretKey):
	        cred = credential.Credential(secretId, secretKey)
	        client = cvm_client.CvmClient(cred, Region)
	        request = models.RunInstancesRequest()
	        request.InstanceChargeType = 'POSTPAID_BY_HOUR'
	        ImageIds_data = DescribeImage(Region, secretId, secretKey)
	        ImageSet = ImageIds_data['data']['ImageSet']
	        for i in ImageSet:
	            OsName = i['OsName']
	            if 'CentOS 7.4 64' in OsName:
	                ImageId = i['ImageId']
	                break
	        request.ImageId = ImageId
	        request.InstanceType = 'S2.SMALL1'
	        request.SecurityGroupIds = ['sg-ep8wygxr']
	        request.SystemDisk = {'DiskType':'CLOUD_SSD','DiskSize':50}
	        request.DataDisks = [{'DiskType':'CLOUD_BASIC','DiskSize':20}]
	        request.Placement = {'Zone':'ap-beijing-3','ProjectId':1114329}
	        request.VirtualPrivateCloud = {'VpcId': 'vpc-3slwyfxi','SubnetId':'subnet-d15cidw7','PrivateIpAddresses':["192.168.0.100","192.168.0.110"]}
	        request.InstanceCount = 2
	        result = client.RunInstances(request)
	        result_srt = result.to_json_string()
	        result_dic = json.loads(result_srt)
	        return {'result': True, 'data': result_dic}

本次分享到此,希望對大家有幫助。感謝大家的瀏覽。

作者:騰訊云代理商


广东时时彩几分钟开奖