經過 Node.js 中的 RESTful API 管理您的雲基礎架構

曾幾什麼時候有人須要在互聯網上發佈他們本身的網站,他們不得不去購買昂貴的服務器,但願性能足以增長用戶羣或購買他們不會滿負荷使用的更昂貴的服務器。但這只是工做的20%,而後他們不得不聯繫ISP併爲服務器購買公共IP並支付每個月的互聯網帳單和電費,而後確保服務器運行24×7。原文node

但今天咱們有一個託管服務,以確保以合理的價格爲咱們處理每一件事。不管您是博主,企業家,經銷商仍是開發人員,您都必須高枕無憂。不管您是天天增長100萬用戶仍是擁有粗糙的補丁,您只須要爲所使用的內容付費。linux

例如,假設您已經制做了火箭去火星,而且您正在構建一個移動應用程序來銷售門票。您今天發佈了應用程序,明天醒來時有數百萬人想要購買機票,但您的應用程序已損壞,由於您的VPS沒法處理負載,或者您是擁有網站並手動訂購服務器的VPS經銷商其餘平臺。 可是,若是您能夠自動執行此操做而無需再次登陸儀表板,該怎麼辦呢? 在本文中,咱們將看到如何使用NodeJS開發它。 對於本文,我將使用Veesp的API來作到這一點。npm

有關此API的更多詳細信息,請參閱如下連接secure.veesp.com/userapi的官方文檔json

Veesp

讓咱們開始吧!swift

安裝npm請求模塊

爲了執行任何類型的HTTP請求,您須要一個HTTP客戶端庫。 您能夠自由使用本身的NodeJS HTTP客戶端。 對於本文,咱們將使用npm請求模塊。windows

首先讓咱們開始使用npm安裝請求模塊,centos

npm i --save request
複製代碼

而後建立一個名爲app.js的文件並導入請求模塊。api

const request = require('request');
複製代碼

訂購VPS

Veesp提供各類服務類別,包括VPS主機,域名,DNS託管和其餘一些服務。 此外,VPS主機分爲幾種類型,Linux SSD VPS,Linux HDD VPS,Windows VPS和專用服務器。服務器

Veesp.com

Veesp API使用HTTP基本用戶身份驗證來驗證用戶。 您應該使用請求標頭髮送您的用戶名和密碼,以便使用端點。網絡

在此示例以後,咱們將省略此模塊導入和用戶名密碼驗證。 可是您應該像咱們以前提到的那樣在每一個請求中發送這些身份驗證詳

因此這裏是從API獲取服務類別列表的代碼。

const request = require('request');

const username = 'your@gmail.com';
const password = 'yourpassword';

const url = 'https://secure.veesp.com/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);
});
複製代碼

若是要執行代碼,能夠打開終端並運行node app.js。 你的控制檯輸出應該是這樣的,

{ 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' },
     …
複製代碼

所以,咱們列出了每一個類別的類別和相關ID。 對於此示例,咱們將訂購一個新的Linux SSD VPS,其中ID爲18,咱們能夠在響應中看到。

而後咱們可使用此類別ID獲取此類別下的產品列表,以下所示。

const url = 'https://secure.veesp.com/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);
});
複製代碼

執行此代碼後,您的控制檯輸出應以下所示,

{ 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] },
…
複製代碼

如今咱們能夠訂購產品了。 將您的主機名做爲參數'domain'傳遞給請求正文。 您能夠選擇要訂購的產品的ID,對於此示例,咱們將訂購512 Mb Ram,10 Gb SSD,100 Gb流量和200 Mbps網絡接口。 您能夠在回覆中看到與該產品相關的ID爲212。

const url = 'https://secure.veesp.com/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);
});
複製代碼

若是您沒有從服務器收到任何錯誤,您如今應該啓動並運行VPS。

列出當前服務

您可能須要獲取當前VPS列表以分析當前使用狀況,並在須要時控制中止或啓動VPS。

讓咱們經過調用/service API獲取服務列表,以下所示

const url = 'https://secure.veesp.com/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);
});
複製代碼

執行此代碼,您應該獲得這樣的響應,

{ 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' } ] }
複製代碼

由於咱們已經建立了一個Linux SSD VPS,因此咱們將得到它以及咱們正在使用的全部其餘服務的列表。 若是您只須要VPS服務器或某個類別,則能夠根據須要按category_url或類別進行過濾。

例如,若是您只想選擇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並啓動VPS

如今咱們有一個服務列表及其ID。 最後,如今咱們能夠得到與服務相關的VM列表,以下所示。 您應該使用如下URL傳遞您的服務ID。 請注意,上述請求29618的服務ID用於獲取VM列表。

const url = 'https://secure.veesp.com/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);
});
複製代碼

您應該從具備VM ID和信息(包括密碼)的服務器得到這樣的響應,

{

  "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和密碼,以在響應中驗證VPS。 如今,您能夠在此階段自動部署應用程序和擴展邏輯,或者若是您是經銷商,則將這些憑據退還給您的客戶。

如今您能夠在VPS上執行中止和啓動操做,以下所示,

要中止服務器,

const url = 'https://secure.veesp.com/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);
});
複製代碼

要啓動服務器,

const url = 'https://secure.veesp.com/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,從新啓動VPS,使用此API更改VPS的啓動順序。

所以,這是使用HTTP API如何使用自動化和應用程序擴展的基礎知識。 但願您會發現這對於隨着客戶羣的增加自動化和擴展業務很是有用,甚至無需再次登陸儀表板。

感謝您花幾分鐘時間閱讀這篇文章!

相關文章
相關標籤/搜索