曾幾何時(shí)有人需要在互聯(lián)網(wǎng)上發(fā)布他們自己的網(wǎng)站,他們不得不去購(gòu)買昂貴的服務(wù)器,希望性能足以增加用戶群或購(gòu)買他們不會(huì)滿負(fù)荷使用的更昂貴的服務(wù)器。但這只是工作的20%,然后他們不得不聯(lián)系ISP并為服務(wù)器購(gòu)買公共IP并支付每月的互聯(lián)網(wǎng)賬單和電費(fèi),然后確保服務(wù)器運(yùn)行24×7。原文
但今天我們有一個(gè)托管服務(wù),以確保以合理的價(jià)格為我們處理每一件事。無(wú)論您是博主,企業(yè)家,經(jīng)銷商還是開發(fā)人員,您都必須高枕無(wú)憂。無(wú)論您是每天增加100萬(wàn)用戶還是擁有粗糙的補(bǔ)丁,您只需要為所使用的內(nèi)容付費(fèi)。
例如,假設(shè)您已經(jīng)制作了火箭去火星,并且您正在構(gòu)建一個(gè)移動(dòng)應(yīng)用程序來(lái)銷售門票。您今天發(fā)布了應(yīng)用程序,明天醒來(lái)時(shí)有數(shù)百萬(wàn)人想要購(gòu)買機(jī)票,但您的應(yīng)用程序已損壞,因?yàn)槟腣PS無(wú)法處理負(fù)載,或者您是擁有網(wǎng)站并手動(dòng)訂購(gòu)服務(wù)器的VPS經(jīng)銷商其他平臺(tái)。
但是,如果您可以自動(dòng)執(zhí)行此操作而無(wú)需再次登錄儀表板,該怎么辦呢? 在本文中,我們將看到如何使用NodeJS開發(fā)它。 對(duì)于本文,我將使用Veesp的API來(lái)做到這一點(diǎn)。
有關(guān)此API的更多詳細(xì)信息,請(qǐng)參閱以下鏈接https://secure./userapi的官方文檔
Veesp讓我們開始吧!
安裝npm請(qǐng)求模塊
為了執(zhí)行任何類型的HTTP請(qǐng)求,您需要一個(gè)HTTP客戶端庫(kù)。 您可以自由使用自己的NodeJS HTTP客戶端。 對(duì)于本文,我們將使用npm請(qǐng)求模塊。
首先讓我們開始使用npm安裝請(qǐng)求模塊,
npm i --save request
然后創(chuàng)建一個(gè)名為app.js的文件并導(dǎo)入請(qǐng)求模塊。
const request = require('request');
訂購(gòu)VPS
Veesp提供各種服務(wù)類別,包括VPS主機(jī),域名,DNS托管和其他一些服務(wù)。 此外,VPS主機(jī)分為幾種類型,Linux SSD VPS,Linux HDD VPS,Windows VPS和專用服務(wù)器。
Veesp.comVeesp API使用HTTP基本用戶身份驗(yàn)證來(lái)驗(yàn)證用戶。 您應(yīng)該使用請(qǐng)求標(biāo)頭發(fā)送您的用戶名和密碼,以便使用端點(diǎn)。
在此示例之后,我們將省略此模塊導(dǎo)入和用戶名密碼驗(yàn)證。 但是您應(yīng)該像我們之前提到的那樣在每個(gè)請(qǐng)求中發(fā)送這些身份驗(yàn)證詳
所以這里是從API獲取服務(wù)類別列表的代碼。
const request = require('request');
const username = 'your@gmail.com';
const password = 'yourpassword';
const url = 'https://secure./api/category';
const auth = new Buffer.from(username + ':' + password).toString('base64');
const req = {
url: url,
method: 'GET',
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
}
};
request(req, (err, res) => {
const body = JSON.parse(res.body);
console.log(body);
});
如果要執(zhí)行代碼,可以打開終端并運(yùn)行node app.js
。 你的控制臺(tái)輸出應(yīng)該是這樣的,
{ categories:
[ { id: '18', name: 'Linux SSD VPS', description: '', slug: 'vps' },
{ id: '19',
name: 'Linux HDD VPS',
description: '',There is also requests and reonses
slug: 'hdd-vps' },
{ id: '17',
name: 'Windows VPS',
description: '',
slug: 'windows-vps' },
…
因此,我們列出了每個(gè)類別的類別和相關(guān)ID。 對(duì)于此示例,我們將訂購(gòu)一個(gè)新的Linux SSD VPS,其中ID為18,我們可以在響應(yīng)中看到。
然后我們可以使用此類別ID獲取此類別下的產(chǎn)品列表,如下所示。
const url = 'https://secure./api/category/18/product';
const req = {
url: url,
method: 'GET',
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
}
};
request(req, (err, res) => {
const body = JSON.parse(res.body);
console.log(body);
});
執(zhí)行此代碼后,您的控制臺(tái)輸出應(yīng)如下所示,
{ products:
[ { id: '212',
type: '11',
name: 'SSD Sandbox',
stock: false,
paytype: 'Regular',
description:
'CPU:1 vCore<br>RAM:512MB<br>SSD:10GB<br>Traffic:100GB<br>Bandwidth:200Mbps<br><ul></ul>',
qty: -603,
tags: [],
periods: [Array] },
{ id: '236',
type: '11',
name: 'SSD 1',
stock: false,
paytype: 'Regular',
description:
'CPU:1 vCore<br>RAM:1GB<br>SSD:25GB<br>Traffic:Unlimited<br>Bandwidth:200Mbps<br><ul></ul>', qty: -436,
tags: [],
periods: [Array] },
…
現(xiàn)在我們可以訂購(gòu)產(chǎn)品了。 將您的主機(jī)名作為參數(shù)'domain'傳遞給請(qǐng)求正文。 您可以選擇要訂購(gòu)的產(chǎn)品的ID,對(duì)于此示例,我們將訂購(gòu)512 Mb Ram,10 Gb SSD,100 Gb流量和200 Mbps網(wǎng)絡(luò)接口。 您可以在回復(fù)中看到與該產(chǎn)品相關(guān)的ID為212。
const url = 'https://secure./api/order/212';
const options = {
method: 'POST',
url: url,
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
},
body: JSON.stringify({
domain: 'myhostname'
})
};
request(options, function (err, res, body) {
console.log(body);
});
如果您沒有從服務(wù)器收到任何錯(cuò)誤,您現(xiàn)在應(yīng)該啟動(dòng)并運(yùn)行VPS。
列出當(dāng)前服務(wù)
您可能需要獲取當(dāng)前VPS列表以分析當(dāng)前使用情況,并在需要時(shí)控制停止或啟動(dòng)VPS。
讓我們通過調(diào)用/service API獲取服務(wù)列表,如下所示
const url = 'https://secure./api/service';
const req = {
url: url,
method: 'GET',
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
}
};
request(req, (err, res) => {
const body = JSON.parse(res.body);
console.log(body);
});
執(zhí)行此代碼,您應(yīng)該得到這樣的響應(yīng),
{ services:
[ { id: '29618',
domain: 'xd002',
total: '4.000',
status: 'Active',
billingcycle: 'Monthly',
next_due: '2019-07-22',
category: 'Linux SSD VPS',
category_url: 'vps',
name: 'SSD Sandbox' },
{ id: '29611',
domain: 'xdhost',
total: '4.000',
status: 'Active',
billingcycle: 'Monthly',
next_due: '2019-07-21',
category: 'Linux SSD VPS',
category_url: 'vps',
name: 'SSD Sandbox' } ] }
因?yàn)槲覀円呀?jīng)創(chuàng)建了一個(gè)Linux SSD VPS,所以我們將獲得它以及我們正在使用的所有其他服務(wù)的列表。 如果您只需要VPS服務(wù)器或某個(gè)類別,則可以根據(jù)需要按category_url或類別進(jìn)行過濾。
例如,如果您只想選擇Linux SSD VPS類別
request(req, (err, res) => {
const body = JSON.parse(res.body);
const services = body.services;
const linuxSSDVpsList = services.filter((item) => {
if (item.category === 'Linux SSD VPS') {
return true;
}
});
console.log(linuxSSDVpsList);
});
Stop并啟動(dòng)VPS
現(xiàn)在我們有一個(gè)服務(wù)列表及其ID。 最后,現(xiàn)在我們可以獲得與服務(wù)相關(guān)的VM列表,如下所示。 您應(yīng)該使用以下URL傳遞您的服務(wù)ID。 請(qǐng)注意,上述請(qǐng)求29618的服務(wù)ID用于獲取VM列表。
const url = 'https://secure./api/service/29618/vms';
const req = {
url: url,
method: 'GET',
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
}
};
request(req, (err, res) => {
const body = JSON.parse(res.body);
console.log(body);
});
您應(yīng)該從具有VM ID和信息(包括密碼)的服務(wù)器獲得這樣的響應(yīng),
{
"vms": {
"17228": {
"password": "afakepassword",
"template": "linux-centos-6-i386-min-gen2-v1",
"template_label": "CentOS 6 32 bit\t",
"disk": 10,
"memory": 512,
"burstmem": -512,
"bandwidth": 100,
"pae": 0,
"pxe": 0,
"id": "17228",
"state": "online",
"ipv6subnets": [
"2a00:1345:37:13a::/64"
],
"usage": {
"disk": {
"total": 10,
"used": 0,
"free": 10,
"percent": "0"
},
"memory": {
"total": 0,
"used": 0,
"free": 0,
"percent": "0"
},
"bandwidth": {
"total": 100,
"used": 0,
"free": 100,
"percent": "0"
}
},
"label": "xd002",
"ip": [
"34.34.56.56",
" 2a00:1345:37:13a::a246"
],
"cpus": "1"
}
}
}
如您所見,您具有分配的公共IP和密碼,以在響應(yīng)中驗(yàn)證VPS。 現(xiàn)在,您可以在此階段自動(dòng)部署應(yīng)用程序和擴(kuò)展邏輯,或者如果您是經(jīng)銷商,則將這些憑據(jù)退還給您的客戶。
現(xiàn)在您可以在VPS上執(zhí)行停止和啟動(dòng)操作,如下所示,
要停止服務(wù)器,
const url = 'https://secure./api/service/29618/vms/17228/stop';
const options = {
method: 'POST',
url: url,
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
}
};
request(options, function (err, res, body) {
console.log(body);
});
要啟動(dòng)服務(wù)器,
const url = 'https://secure./api/service/29618/vms/17228/start';
const options = {
method: 'POST',
url: url,
headers: {
'Authorization': 'Basic ' + auth,
'Content-Type': 'application/json'
}
};
request(options, function (err, res, body) {
console.log(body);
});
除此之外,您可以重建VPS,重新啟動(dòng)VPS,使用此API更改VPS的啟動(dòng)順序。
因此,這是使用HTTP API如何使用自動(dòng)化和應(yīng)用程序擴(kuò)展的基礎(chǔ)知識(shí)。 希望您會(huì)發(fā)現(xiàn)這對(duì)于隨著客戶群的增長(zhǎng)自動(dòng)化和擴(kuò)展業(yè)務(wù)非常有用,甚至無(wú)需再次登錄儀表板。
感謝您花幾分鐘時(shí)間閱讀這篇文章!