Примеры обращения к API из PHP

Ниже приведен пример функции на PHP, которую можно использовать для обращения к нашему API

/**
 * Функция для обращения к API NetAngels.
 *
 * Принимаемые параметры:
 *    $resource:  URL ресурса относительно базового адреса API
 *                (например, "dnszone/30/"). Требуется завершающий слеш
 *    $method:    HTTP-метод для выполнения операции. Строка, которая может
 *                принимать одно из значений: "GET", "POST", "PUT", "DELETE".
 *    $login:     логин для авторизации (строка вида "uXXXX")
 *    $password:  пароль для авторизации (строка)
 *    $args:      массив параметров, принимаемый в случае создания или
 *                изменения объекта. Например, для создания зоны DNS:
 *                array("name" => "example.com", "ttl" => 7200).
 *
 *    В случае успешного завершения функция возвращает разобранный
 *    JSON-ответ. В случае ошибки возбуждается исключение
 * /
define("BASE_URL", "https://panel.netangels.ru/api/v1/");

function api_request($resource, $method, $login, $password, $args=null) {

    $full_url = BASE_URL . "$resource";
    $options = array(
        CURLOPT_URL => $full_url,
        CURLOPT_USERPWD => "$login:$password",
        CURLOPT_HTTPHEADER => array('Content-Type: application/json',
                                    'Accept: application/json'),
        CURLOPT_CUSTOMREQUEST => $method,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_USERAGENT => "NetAngels API client 0.1"
    );
    if ($args) {
        $json_args = json_encode($args);
        $options[CURLOPT_POSTFIELDS] = $json_args;
    }

    $ch = curl_init();
    curl_setopt_array($ch, $options);

    $content = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ( $status > 399 ) {
        throw new Exception("Exception $status: $content");
    }
    return json_decode($content);
}

Используя такую функцию, вы можете выполнять любые запросы к API. Примеры таких запросов

Получить список всех зон DNS

$res = api_request("dnszone/", "GET", $login, $password);
foreach($res->objects as $dnszone) {
    printf("Зона DNS [%d]: %s\n", $dnszone->id, $dnszone->name);
}

Добавить новую зону DNS

В случае возникновения ошибки (например, если такая зона DNS уже существует) будет вызвано исключение, которое перехватывается и выводится в браузер или в консоль.

$dnszone =  array("name" => "foobarbaz.ru", "ttl" => 4*60*60);
try {
    $res = api_request("dnszone/", "POST", $login, $password, $dnszone);
} catch (Exception $e) {
    echo $e->getMessage() . "\n";
}

Обновить TTL для выбранной зоны DNS

$res = api_request("dnszone/?name=foobarbaz.ru", "GET", $login, $password);
$zoneId = $res->objects[0]->id;
$putData = array("ttl" => 2 * 60 * 60);
$res = api_request("dnszone/" . $zoneId . "/", "PUT", $login, $password, $putData);

Найти и удалить зону DNS

$res = api_request("dnszone/?name=foobarbaz.ru", "GET", $login, $password);
$zoneId = $res->objects[0]->id;
$res = api_request("dnszone/" . $zoneId . "/", "DELETE", $login, $password);