一个账号服务于多人多个项目,为了亲兄弟明算账,要把账号内通过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还是界面上都删除不了,所以创建这个接口就不要反复测试了。
项目产生的费用要到第二天才能看到明细
其实用request写会更简洁一点点,但是因为在SCF中使用的时候不想多挂一个request的层,所以试用nodejs原生的https模块实现了网络访问。
现在v3的API和SDK已经比较完备了,但是还是偶尔会感觉到网页控制台上能做的事情比API和SDK能做的多一些,但是网页控制台它不也得通过API去完成所有的操作吗?有时这样扒拉一下旧文档说不定就能发现惊喜。