调用V2的老接口做项目管理

2022-10-24 10:05:36 浏览数 (2)

一个账号服务于多人多个项目,为了亲兄弟明算账,要把账号内通过API创建的的资源都挂到不同的项目下。腾讯云v2之前的的API是支持做项目管理的,自从升级到到v3以后就没有这个能力了,在API Explorer里面查不到任何相关的接口,其他接口中涉及到项目ID的地方还会指向几个老版本的超链接,但是也都是空页面自动跳转掉了。

相关的接口文档已经失踪了相关的接口文档已经失踪了

实在想要通过程序自动化的管理项目,只能退回到v2的老接口。虽然详细的接口文档已经不好找了,但是一番努力还是在github上找到了已经废弃的几个老文档:

v2接口调用的公共参数

v2接口签名的生成算法

项目相关的v2接口

有了这几样东西,就很容易包装出来基础的项目管理模块了:

代码语言:javascript复制
const crypto=require('crypto'),https=require('https');
function call_v2(domain,param){
	const baseURL = domain ".api.zijiebao.com/v2/index.php?";
	let p={
		SecretId:secretId,
		Timestamp:Math.floor(Date.now()/1000),
		Nonce:Math.floor(Math.random()*90000 10000),
		SignatureMethod : "HmacSHA256",
	}
	Object.assign(p,param);
	let orgString = "GET" baseURL Object.keys(p).sort()
		.map(key=>key "=" p[key]).join("&")
	let signature = crypto.createHmac('SHA256',secretKey)
		.update(orgString).digest('base64')
	p.Signature = encodeURIComponent(signature)
	let url = "https://" baseURL Object.keys(p).sort()
		.map(key=>key "=" p[key]).join("&")
	return new Promise((res, rej) => {
		const req = https.request(url,{},(result) => {
			let chunks = [];
			result.on('data',(d)=>{chunks.push(d)});
			result.on('end',()=>{res(JSON.parse(chunks.toString()))})
			result.on('error', (e) => {	rej(e)})
		});
		req.end();
	})
}
function call_v2_account(param){
	return call_v2("account",param)
}
function call_v2_tag(param){
	return call_v2("tag",param)
}
function describeProject(){
	let param={Action:"DescribeProject"}
	return call_v2_account(param)
}
function addProject(name,desc){
	let param={
		Action:"AddProject",
		projectName:name,
		projectDesc:desc
	}
	return call_v2_account(param)
}
function updateProject(projectId,name,desc){
	let param={Action:"UpdateProject",
	projectId:projectId,
	name:name,
	info:desc"
	}
	return call_v2_tag(param)
}
function stopProject(projectId){
	let param={Action:"StopProject",projectId:projectId}
	return call_v2_tag(param)
}
function startProject(projectId){
	let param={Action:"StartProject",projectId:projectId}
	return call_v2_tag(param)
}

一个账号最多只能创建100个项目,而项目一旦创建就删除不了,不管是API还是界面上都删除不了,所以创建这个接口就不要反复测试了。

项目产生的费用要到第二天才能看到明细

测试项目1测试项目1
测试项目2测试项目2

其实用request写会更简洁一点点,但是因为在SCF中使用的时候不想多挂一个request的层,所以试用nodejs原生的https模块实现了网络访问。

现在v3的API和SDK已经比较完备了,但是还是偶尔会感觉到网页控制台上能做的事情比API和SDK能做的多一些,但是网页控制台它不也得通过API去完成所有的操作吗?有时这样扒拉一下旧文档说不定就能发现惊喜。

0 人点赞