1and1/1and1-sdk-php

此包已被废弃,不再维护。未建议替代包。

1and1 REST API 的官方 PHP SDK

1.0.0 2016-06-01 20:00 UTC

This package is not auto-updated.

Last update: 2018-09-29 20:34:55 UTC


README

1and1 PHP SDK 是一个用于通过 REST API 与 1and1 平台交互的库。

本指南将向您展示如何使用 1and1 库以编程方式执行 1and1 控制面板中也可用的常见管理任务。有关 1and1 PHP SDK 的更多信息,请参阅1and1 社区门户

目录

概述

PHP 客户端库封装了 1and1 REST API 的最新版本。所有 API 操作都通过 SSL 执行,并使用您的 1and1 API Token 进行身份验证。API 可以在 1and1 中运行的实例内访问,也可以从任何可以发送 HTTPS 请求并接收 HTTPS 响应的应用程序直接通过互联网访问。

有关 1and1 Cloud Server SDK for PHP 的更多信息,请访问 社区门户

入门

在开始之前,您需要注册一个 1and1 账户。注册时设置的凭据将用于 API 的身份验证。

安装

您可以使用 Composer 安装最新稳定版本。如果您还没有安装 Composer,请遵循他们的安装说明 在此。一旦您安装了 Composer,请将以下片段添加到您的 composer.json 文件中,然后从终端运行 composer install(如果您全局安装了 Composer),或 php composer.phar install(如果您本地安装了 Composer)。这将为您创建一个 vendor 目录,并允许您使用 1and1 PHP SDK。

{
    "require": {
        "1and1/1and1-sdk-php": ">=1.0.0"
    }
}

您需要通过在您的 PHP 脚本顶部引入 Composer 的自动加载文件来自动加载 SDK,如下所示

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

注意:Linux 操作系统上发现了一个问题,阻止 SDK 类自动加载。完成上述所有步骤后,您需要在您最初运行 composer install 的目录中运行 composer dumpautoload -o(全局安装),或 php composer.phar dumpautoload -o(本地安装)。您的文件结构应如下所示

/repo-root
  - composer.json
  - composer.lock
  - composer.phar (if you installed composer locally)
  - create_server.php
  - /vendor

执行 dumpautoload 命令后,您应该能够运行您的 create_server.php 脚本。

身份验证

连接到1&1需要首先设置您的身份验证。通过使用您的API令牌初始化模块来启动您的应用程序。

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

$client = new OneAndOne('<API-TOKEN>');

现在,您可以像下面的示例那样使用$client执行所有未来的操作。

操作

使用模块

1&1官方REST API文档: https://cloudpanel-api.1and1.com/documentation/1and1/v1/en/documentation.html

以下示例旨在为您提供一些使用1&1 PHP SDK可以执行操作的概述。有关所有方法和功能的详细列表,请访问reference.md文件。

创建云服务器

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Server Object
$server = $client->server();

// Create HDD's
$hdd1 = [
    'size' => 120,
    'is_main' => True
];

$hdds = [$hdd1];

// Create Server
$my_server = [
    'name' => 'Example Server',
    'description' => 'Example Desc',
    'server_type' => 'cloud',
    'hardware' => [
        'vcore' => 1,
        'cores_per_processor' => 1,
        'ram' => 1,
        'hdds' => $hdds
    ],
    'appliance_id' => '<IMAGE-ID>'
];

// Perform Request
$res = $server->create($my_server);
echo json_encode($res, JSON_PRETTY_PRINT);

创建裸金属服务器

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Server Object
$server = $client->server();

// Create HDD's
$hdd1 = [
    'size' => 120,
    'is_main' => True
];

$hdds = [$hdd1];

// Create Server
$my_server = [
    'name' => 'Example Server',
    'description' => 'Example Desc',
    'server_type' => 'baremetal',
    'hardware' => [
       'baremetal_model_id' =>'<BAREMETAL-MODEL-ID>'
    ],
    'appliance_id' => '<IMAGE-ID>'
];

// Perform Request
$res = $server->create($my_server);
echo json_encode($res, JSON_PRETTY_PRINT);

创建具有SSH密钥访问的服务器

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Server Object
$server = $client->server();

// Create HDD's
$hdd1 = [
    'size' => 120,
    'is_main' => True
];

$hdds = [$hdd1];

// Assign your public key to a variable
$pub_key = '<PUB-KEY>';

// Create Server
$my_server = [
    'name' => 'Example Server',
    'description' => 'Example Desc',
    'hardware' => [
        'vcore' => 1,
        'cores_per_processor' => 1,
        'ram' => 1,
        'hdds' => $hdds
    ],
    'appliance_id' => '<IMAGE-ID>',
    'rsa_key' => $pub_key
];

// Perform Request
$res = $server->create($my_server);
echo json_encode($res, JSON_PRETTY_PRINT);

注意:您可以在终端执行以下命令后通过SSH登录到您的服务器

ssh –i <path_to_private_key_file> root@SERVER_IP

创建防火墙策略

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Firewall Object
$firewall_policy = $client->firewallPolicy();

// Create Rules
$rule1 = [
    'protocol' => 'TCP',
    'port' => 80,
    'action' => "allow",
    'source' => '0.0.0.0'
];

$rules = [$rule1];

// Create Firewall
$args = [
    'name' => 'Example Firewall',
    'description' => 'Example Desc',
    'rules' => $rules
];

// Perform Request
$res = $firewall_policy->create($args);
echo json_encode($res, JSON_PRETTY_PRINT);

创建负载均衡器

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Load Balancer Object
$load_balancer = $client->loadBalancer();

// Create Rules
$rule1 = [
    'protocol' => 'TCP',
    'port_balancer' => 80,
    'port_server' => 80,
    'source' => '0.0.0.0'
];

$rules = [$rule1];

// Create Load Balancer
$args = [
    'name' => 'Example LB',
    'health_check_test' => 'TCP',
    'health_check_interval' => 40,
    'persistence' => True,
    'persistence_time' => 1200,
    'method' => 'ROUND_ROBIN',
    'rules' => $rules
];

// Perform Request
$res = $load_balancer->create($args);
echo json_encode($res, JSON_PRETTY_PRINT);

创建监控策略

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Monitoring Policy Object
$monitoring_policy = $client->monitoringPolicy();

// Create Threshold Values
$thresholds = [
    'cpu' => [
        'warning' => [
            'value' => 90,
            'alert' => False
        ],
        'critical' => [
            'value' => 95,
            'alert' => True
        ]
    ],
    'ram' => [
        'warning' => [
            'value' => 90,
            'alert' => False
        ],
        'critical' => [
            'value' => 95,
            'alert' => True
        ]
    ],
    'disk' => [
        'warning' => [
            'value' => 80,
            'alert' => False
        ],
        'critical' => [
            'value' => 90,
            'alert' => True
        ]
    ],
    'transfer' => [
        'warning' => [
            'value' => 1000,
            'alert' => False
        ],
        'critical' => [
            'value' => 2000,
            'alert' => True
        ]
    ],
    'internal_ping' => [
        'warning' => [
            'value' => 50,
            'alert' => False
        ],
        'critical' => [
            'value' => 100,
            'alert' => True
        ]
    ]
];

// Create Processes
$process1 = [
    'process' => 'test',
    'alert_if' => 'NOT_RUNNING',
    'email_notification' => True
];

$processes = [$process1];

// Create Ports
$port1 = [
    'protocol' => 'TCP',
    'port' => 22,
    'alert_if' => 'NOT_RESPONDING',
    'email_notification' => True
];

$ports = [$port1];

// Create Monitoring Policy
$args = [
    'name' => 'Example MP',
    'email' => 'test@example.com',
    'agent' => True,
    'thresholds' => $thresholds,
    'ports' => $ports,
    'processes' => $processes
];

// Perform Request
$res = $monitoring_policy->create($args);
echo json_encode($res, JSON_PRETTY_PRINT);

然后,添加一个或两个服务器

$server1 = '<SERVER-ID>';

$servers = [$server1];

$res = $monitoring_policy->addServers($servers);
echo json_encode($res, JSON_PRETTY_PRINT);

创建块存储

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Block Storage Object
$block_storage = $client->blockStorage();

// Create Block Storage
$args = [
    'name' => 'My new block storage',
    'description' => 'My block storage description',
    'size' => 40,
    'server' => '<SERVER-ID>',
    'datacenter_id' => '<DATACENTER-ID>'
];

// Perform Request
$res = $block_storage->create($args);
echo json_encode($res, JSON_PRETTY_PRINT);

创建SSH密钥

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate SshKey Object
$ssh_key = $client->sshKey();

// Create SSH Key
$args = [
    'name' => 'Test SSH Key',
    'description' => 'Test description',
    'public_key' => '<PUBLIC-KEY>'
];

// Perform Request
$res = $ssh_key->create($args);
echo json_encode($res, JSON_PRETTY_PRINT);

更新服务器核心、内存和磁盘

1&1允许用户独立于彼此动态更新核心、内存和磁盘。这消除了需要升级到下一个大小以获得内存增加的限制。现在,您可以简单地增加实例内存,使您的成本与资源需求保持一致。

以下代码说明了如何更新核心和内存

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Server Object
$server = $client->server();

$specs = [
    'vcore' => 2,
    'ram' => 6
];

$res = $server->modifyHardware($specs, '<SERVER-ID>');
echo json_encode($res, JSON_PRETTY_PRINT);

这是更新服务器磁盘大小的示例

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// Instantiate Server Object
$server = $client->server();

// Create HDD Resize
$resize = [
    'hdd_id' => '<HDD-ID>',
    'size' => 140
];

$res = $server->modifyHdd($resize, '<SERVER-ID>');
echo json_encode($res, JSON_PRETTY_PRINT);

列出服务器、镜像、共享存储等

生成资源列表相对简单。库中的每个类都配备了all方法。您可以通过传递可选的查询参数来帮助过滤结果。默认情况下,这些参数都设置为null

以下是您可用的参数

      -page (整数):允许使用分页。指定要开始的页面。

      -per_page (整数):每页的项目数。

      -sort (字符串):sort => 'name'按字母顺序检索元素列表。sort => 'creation_date'按创建日期降序检索元素列表。

      -q (字符串):q是查询。使用此参数返回仅匹配您的搜索查询的项目。

      -fields (字符串): 仅返回请求的参数。(例如,fields => 'id, name, description, hardware.ram')

以下是一些如何列出资源的示例

<?php

require(__DIR__.'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');


// List All Servers On Your Account
$server = $client->server();

$res = $server->all();
echo json_encode($res, JSON_PRETTY_PRINT);


// List All Servers Whose Name Contains "My"
$server = $client->server();

$params = [
    'q' => 'My'
];

$res = $server->all($params);
echo json_encode($res, JSON_PRETTY_PRINT);


# List all images on your account
$image = $client->image();

$res = $image->all();
echo json_encode($res, JSON_PRETTY_PRINT);


# List all block storages on your account
$block_storage = $client->blockStorage();

$res = $block_storage->all();
echo json_encode($res, JSON_PRETTY_PRINT);


# List all ssh keys on your account
$ssh_key = $client->sshKey();

$res = $ssh_key->all();
echo json_encode($res, JSON_PRETTY_PRINT);

示例应用

这个简单的应用创建了一个负载均衡器、防火墙策略和服务器。然后将负载均衡器和防火墙策略添加到服务器的初始IP地址。您可以通过在服务器类对象上使用first_ip属性来访问服务器的初始IP,如下例所示。

示例应用的源代码可以在此处找到。

<?php

require(dirname(__DIR__).'/vendor/autoload.php');

use src\oneandone\OneAndOne;

// Instantiate library with your API Token
$client = new OneAndOne('<API-TOKEN>');



// Create Load Balancer
$load_balancer = $client->loadBalancer();

$rule1 = [
    'protocol' => 'TCP',
    'port_balancer' => 80,
    'port_server' => 80,
    'source' => '0.0.0.0'
];

$rules = [$rule1];

$args = [
    'name' => 'Example LB',
    'health_check_test' => 'TCP',
    'health_check_interval' => 40,
    'persistence' => True,
    'persistence_time' => 1200,
    'method' => 'ROUND_ROBIN',
    'rules' => $rules
];

echo "Creating load balancer...\n";
$res = $load_balancer->create($args);
// Wait for Load Balancer to Deploy
echo $load_balancer->waitFor();



// Create Firewall Policy
$firewall_policy = $client->firewallPolicy();

$rule1 = [
    'protocol' => 'TCP',
    'port' => 80,
    'action' => "allow",
    'source' => '0.0.0.0'
];

$rules = [$rule1];

$args = [
    'name' => 'Example Firewall',
    'description' => 'Example Desc',
    'rules' => $rules
];

echo "\nCreating firewall policy...\n";
$res = $firewall_policy->create($args);
// Wait for Firewall to Deploy
echo $firewall_policy->waitFor();



// Create Server
$server = $client->server();

$my_server = [
    'name' => 'Example App Server',
    'server_type' => 'cloud',
    'hardware' => [
        'fixed_instance_size_id' => '65929629F35BBFBA63022008F773F3EB'
    ],
    'appliance_id' => '6C902E5899CC6F7ED18595EBEB542EE1',
    'datacenter_id' => '5091F6D8CBFEF9C26ACE957C652D5D49'
];

echo "\nCreating server...\n";
$res = $server->create($my_server);
// Wait for Server to Deploy
echo $server->waitFor();



// Create Block Storage
$block_storage = $client->blockStorage();

$my_block_storage = [
    'name' => 'My new block storage',
    'description' => 'My block storage description',
    'size' => 40,
    'server' => $server->id,
    'datacenter_id' => $server->specs['datacenter_id']
];

echo "\nCreating block storage...\n";
$res = $block_storage->create($my_block_storage);
// Wait for Block Storage to be ready
echo $block_storage->waitFor();



// Add the Load Balancer to the New IP
$add_lb = [
    'ip_id' => $server->first_ip['id'],
    'load_balancer_id' => $load_balancer->id
];

echo "\nAdding load balancer to the IP...\n";
$res = $server->addLoadBalancer($add_lb);
// Wait for load balancer to be added
echo $server->waitFor();



// Add the Firewall Policy to the New IP
$add_firewall = [
    'ip_id' => $server->first_ip['id'],
    'firewall_id' => $firewall_policy->id
];

echo "\nAdding firewall policy to the IP...\n";
$res = $server->addFirewall($add_firewall);
// Wait for firewall policy to be added
echo $server->waitFor();



// Cleanup
echo "\nEverything looks good!\n";
echo "\nLet's clean up the mess we just made.\n";

echo "\nDeleting block storage...\n";
$block_storage->delete();
echo "Success!\n";

echo "\nDeleting server...\n";
$server->delete();
echo "Success!\n";

echo "\nDeleting load balancer...\n";
$load_balancer->delete();
echo "Success!\n";

echo "\nDeleting firewall policy...\n";
$firewall_policy->delete();
echo "Success!\n";