通过 Node.js 中的 RESTful API 管理您的云基础架构

曾几何时有人需要在互联网上发布他们自己的网站,他们不得不去购买昂贵的服务器,希望性能足以增加用户群或购买他们不会满负荷使用的更昂贵的服务器。但这只是工作的20%,然后他们不得不联系ISP并为服务器购买公共IP并支付每月的互联网账单和电费,然后确保服务器运行24×7。原文

但今天我们有一个托管服务,以确保以合理的价格为我们处理每一件事。无论您是博主,企业家,经销商还是开发人员,您都必须高枕无忧。无论您是每天增加100万用户还是拥有粗糙的补丁,您只需要为所使用的内容付费。

例如,假设您已经制作了火箭去火星,并且您正在构建一个移动应用程序来销售门票。您今天发布了应用程序,明天醒来时有数百万人想要购买机票,但您的应用程序已损坏,因为您的VPS无法处理负载,或者您是拥有网站并手动订购服务器的VPS经销商其他平台。
但是,如果您可以自动执行此操作而无需再次登录仪表板,该怎么办呢? 在本文中,我们将看到如何使用NodeJS开发它。 对于本文,我将使用Veesp的API来做到这一点。

有关此API的更多详细信息,请参阅以下链接https://secure.veesp.com/userapi的官方文档

通过 Node.js 中的 RESTful API 管理您的云基础架构

让我们开始吧!

安装npm请求模块

为了执行任何类型的HTTP请求,您需要一个HTTP客户端库。 您可以自由使用自己的NodeJS HTTP客户端。 对于本文,我们将使用npm请求模块。

首先让我们开始使用npm安装请求模块,

npm i --save request

然后创建一个名为app.js的文件并导入请求模块。

const request = require('request');

订购VPS

Veesp提供各种服务类别,包括VPS主机,域名,DNS托管和其他一些服务。 此外,VPS主机分为几种类型,Linux SSD VPS,Linux HDD VPS,Windows VPS和专用服务器。通过 Node.js 中的 RESTful API 管理您的云基础架构

Veesp API使用HTTP基本用户身份验证来验证用户。 您应该使用请求标头发送您的用户名和密码,以便使用端点。

在此示例之后,我们将省略此模块导入和用户名密码验证。 但是您应该像我们之前提到的那样在每个请求中发送这些身份验证详

所以这里是从API获取服务类别列表的代码。

const request = require('request');

const username = '[email protected]';
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如何使用自动化和应用程序扩展的基础知识。 希望您会发现这对于随着客户群的增长自动化和扩展业务非常有用,甚至无需再次登录仪表板。

感谢您花几分钟时间阅读这篇文章!

相关推荐