产品的每次更新迭代都意味着一种提升和进步, 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 中心 https://cloud.tencent.com/document/sdk 下载.
然而这里有个注意事项, 以 CVM 的 API 为例, 在 API 文档中的输入参数部分, 您会看到 Version 是必选参数. 如果您使用 SDK 的话, CvmClient 的时候已经默认传好 Version, 则不需要将 Version 作为必选参数进行传参了.
2, 输入参数
从 API 文档中可以看到, 输入参数的数据类型会有很多中, 比如 String,Integer,Array of String,Array of Object 以及 Object. 其中 String 和 Integer 比较容易理解, 我则不例举例子了. 而是以创建 CVM https://cloud.tencent.com/document/api/213/15730 为例分别对另外三种输入参数类型举例讲解.
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 的使用
本小节以查看实例列表 https://cloud.tencent.com/document/api/213/15728 对 Filters 的使用进行个示例讲解.
Filter 的数据结构为:
示例代码:
返回结果如下:
4,CLI 的使用
除了提供 SDK , 腾讯云还提供了好用的腾讯云命令行工具 (TCCLI) https://cloud.tencent.com/document/product/440/6176 , 该命令行工具的使用是非常简单的, 我这里就不举例说明了, 详情可查看官网文档.
然后这里需要提醒大家的是, 注意 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]
更多高级用法请参考官方文档 https://github.com/TencentCloud/tencentcloud-cli .
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}
本次分享到此, 希望对大家有帮助. 感谢大家的浏览.
来源: https://www.qcloud.com/developer/article/1151836