转自:
作为产品线的支撑角色QA/CI/CD等,http api解析是互联网公司中最常见的工作。
接口访问,返回的数据一般是json格式。
常见场景:对json格式数据的解析,取某个字段的值,做相应的判断。
任务:
假设刚部署出来的site的域名url为 https://qa-ultra-rds-96x.bbpd.io,现在检验version字段是否与预期相符。
与开发同学沟通,得知version信息可以通过访问api(/ultra/api/v1/buildinfo)获取到。
响应的数据为:
{
"name": "ultra", "version": "3400.3.0", "branch": "develop", "commit": "a8ccaeb2b1c6094d598932219bb32cf9fe0380", "timestamp": "1523024279567", "date": "2018-04-06_14-17-59", "buildNumber": "3033", "buildName": "ultra/ultra-ui/develop", "buildType": "webpack", "buildVersion": "3400.3.0-ci.3033+a8ccaeb2", "ultraVersion": "2018-04-06_09-38-20", "learnVersion": "3400.3.0-ci.2927+b960272", "webServerVersion": "2.0.16", "config": { "mode": "production", "uiVersioningEnabled": true, "staticAssetsDomain": "d2aqwpvls1cndj.cloudfront.net", "learnVersionMapping": [ { "from": "0.0.0.0", "uiVersion": "2018-04-06_09-38-20" } ] }}SHELL脚本实现:
curl -s --insecure https://qa-ultra-rds-96x.bbpd.io/ultra/api/v1/buildinfo|grep ' "ultraVersion"'|awk -F '"' '{print $4}'
PYTHON脚本实现:
#!/usr/bin/python
# -*- coding: UTF-8 -*-import sysimport jsonimport requestsdef get_ultra_ui_version(base_url):version_url = base_url + '/ultra/api/v1/buildinfo'try:res = requests.get(version_url)print('respons status is %d' % res.status_code)ultraVersion = json.loads(res.text)['ultraVersion']print(type(ultraVersion))except Exception as ex:print('call api is failed and error message is :%s' % str(ex))print(ultraVersion) return ultraVersion if len(sys.argv) >=2:base_url = sys.argv[1]else:print('parameters are missing')sys.exit()get_ultra_ui_version(base_url)
总结:
对比一下,
发现不需要登录状态下,且只需要获取简单信息,不需要后续处理,api的访问使用shell比python要简单的多。如果涉及登录,可以借用python的requests库,可以实现较复杂的认证功能。且使用python库可以实现多请求的连续访问,多次请求之间有session的依赖关系。保持底层session不中断,可以减少建立tcp连接的次数,支持高并发。