腾讯云 API 3.0实践分享

产品的每次更新迭代都意味着一种提升和进步,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}

本次分享到此,希望对大家有帮助。感谢大家的浏览。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

6 条评论
登录 后参与评论

相关文章

来自专栏Android开发实战

Tinker Android热补丁框架

国际惯例先贴地址 Tinker开源地址:https://github.com/Tencent/tinker

743
来自专栏jiajia_deng

设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小

1232
来自专栏菜鸟致敬

【菜鸟致敬】爬取豆瓣的短评(⊙o⊙)…

因为需要一点数据,所以就去爬取一点豆瓣短评的数据。因为短评页面是生成的静态html,还是很容易爬虫数据的,其中发现了问题每部电影短评在同一条件下最多只能查阅50...

691
来自专栏崔庆才的专栏

使用requests+正则表达式爬取猫眼电影排行

本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容。requests比urllib使用更加方便,而且目前我们还没有系统学习HTM...

5517
来自专栏日常学python

用Python代码来下载任意指定网易云歌曲

前两天教了大家如何在控制台上找到真实的mp3播放地址,但是不可以下载付费的,因为只能下载可播放的歌曲。至于怎样下载付费网易云音乐,还是开个会员吧,要知道免费是最...

701
来自专栏java一日一条

怎样编写高质量的Java代码

怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码...

491
来自专栏JackeyGao的博客

Python 和 Golang 一点愚见

Python 之所以有很好开发效率是因为语法简单,灵活。有大量的轮子可供选择, 文档支持非常棒。 我用Python编程的时候,基本成了一把梭“拿起键盘复制粘贴,...

832
来自专栏腾讯移动品质中心TMQ的专栏

JAVA代码覆盖率工具JaCoCo-原理篇

关于JAVA代码覆盖率工具JaCoCo,作者会通过三篇来介绍,分别为原理篇、实践篇和踩坑篇,先从原理篇开始介绍~ 一、覆盖率定义 作为一个测试人员,保证产品的软...

6308
来自专栏腾讯云API

【转】腾讯云 API 3.0实践分享

原文地址:https://cloud.tencent.com/developer/article/1151836

1912
来自专栏Crossin的编程教室

【Python 第62课】 调试程序

写代码,不可避免地会出现bug。很多人在初学编程的时候,当写完程序运行时,发现结果与自己预料中的不同,或者程序意外中止了,就一时没了想法,不知道该从何下手,只能...

2629

扫码关注云+社区