В нашем блоге мы уже рассказывали про API проекта 1cloud, которое используется для интеграции клиентских приложений с нашим облаком и облегчает работать с облачной инфраструктурой. В сегодняшнем материале мы расскажем о некоторых реальных кейсах использования этого открытого интерфейса.

Схема работы


Вкратце расскажем о принципах работы нашего открытого интерфейса. Для удобства работы с серверами из сторонних приложений мы реализовали REST API. В инфраструктуре 1cloud при выполнении пользователем действий в графическом интерфейсе не происходит никаких обработок, вместо этого формируется задание на выполнение нужного действия специальным обработчиком (подробнее об этой схеме мы рассказывали в этом материале).

В API также используется этот механизм: когда клиентское приложение посылает запрос к API, то система формирует задание, которое передается обработчику, и уже затем происходит выполнение. Отслеживать состояние конкретной задачи можно с помощью специальных запросов (о них ниже).

Авторизация приложения для работы с API происходит с помощью вставки в заголовок запроса токена (закрытого ключа), данная схема безопасна, т.к. используется SSL-шифрование. Токен можно сгенерировать в панели управления:



Для кого все это


С помощью API возможна полная автоматизация задач по управлению виртуальной инфраструктурой (или по ее масштабированию) без необходимости работы «руками» в интерфейсе панели управления. Все эти возможности могут быть полезны как частным клиентам, так и различным организациям. В их числе, например:

  • Реселлерам услуг хостинга;
  • Компаниям, занимающиеся созданием пакетов услуг разных облачных провайдеров (популярная на Западе тема, вот пример такого сервиса);
  • Организациям, чьи коммерческие сервисы расположены на наших мощностях, для автоматизации процесса создания новых экземпляров виртуальных серверов;
  • Разработчикам приложений — с помощью API можно автоматически масштабировать виртуальную инфраструктуру. Пример: при увеличении нагрузки автоматически «поднимать» новую виртуальную машину, на которую переносится часть задач, а по прошествии пика, так же автоматически удалить уже ненужный сервер. Также API полезно в процессе непрерывной интеграции (continuous integration) — при проверке программного кода можно создать несколько серверов для эталонного тестирования.

С организационной частью все, теперь поговорим о том, какие задачи можно реально выполнять с помощью API.

Какие задачи можно решать


Как уже сказано выше, наше API можно использовать для совершения всех тех действий, что доступны пользователям в графическом интерфейсе системы управления.

Самым распространенным сценарием использования API среди пользователей на сегодняшний день является создание нового виртуального сервера. С помощью отправки POST-запроса пользователь может «поднять» новую виртуальную машину с заданными параметрами (процессор, память, хранилище и т.п.). Запрос выглядит примерно так:

curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer 75bb9805c018b1267b2cf599a38b95a3a811e2ef7ad9ca5ed838ea4c6bafaf50' "https://api.1cloud.ru/Server" -d '{"Name":"testAPI","CPU":1,"RAM":1024,"HDD":40,"imageID":1,"HDDType":"SSD","IsHighPerformance":true}'

В ответ приходит JSON-объект со всем атрибутами созданного сервера:

{
  "ID":777,
  "Name":"testAPI",
  "State":"Active",
  "IsPowerOn":true,
  "CPU":1,
  "RAM":1024,
  "HDD":40,
  "IP":"5.200.XX.XX",
  "AdminUserName":"1CloudAdmin",
  "AdminPassword":"XXXXXXXX",
  "Image":"WinServer2008R2x64En",
  "IsHighPerformance":false,
  "HDDType":"SAS",
  "LinkedNetworks":[{"NetworkID":57, "IP":"10.0.1.1"}, {"NetworkID":98, "IP":"10.0.2.4"}]
}

Еще одна популярная задача — создание шаблона виртуального сервера.

Для того, чтобы создать шаблон сервера, пользователю нужно отправить POST-запрос по адресу https://api.1cloud.ru/image, Выглядеть он может примерно так:

curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer 75bb9805c018b1267b2cf599a38b95a3a811e2ef7ad9ca5ed838ea4c6bafaf50' "https://api.1cloud.ru/image" -d '{"Name":"Шаблон","TechName":"TemplateAPI","ServerID":6940}'

Где Name — это название шаблона, TechName — его техническое наименование, и ServerID — индентификатор сервера, из которого делаем шаблон.

Ответом будет JSON-объект, содержащий все атрибуты созданного шаблона. Например:

{
  "ID":72,
  "Name":"testAPITemplate"
}

Созданный шаблон впоследствии можно удалить, для этого нужно отправить запрос DELETE по адресу https://api.1cloud.ru/image/{id}, где {id} — идентификатор удаляемого шаблона.

curl -X DELETE -H 'Content-Type: application/json' -H 'Authorization: Bearer 75bb9805c018b1267b2cf599a38b95a3a811e2ef7ad9ca5ed838ea4c6bafaf50' "https://api.1cloud.ru/image/72"

Помимо работы с шаблонами серверов, с помощью API можно управлять частными сетями. Например, получать список доступных сетей и создавать (или удалять) их. Рассмотрим как раз этот случай.

Чтобы создать частную сеть, нужно отправить POST-запрос с ее названием на соответствующий адрес:

curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer 75bb9805c018b1267b2cf599a38b95a3a811e2ef7ad9ca5ed838ea4c6bafaf50' "https://api.1cloud.ru/network" -d '{"Name":"testNetworkAPI"}'

Ответом будет JSON-объект, содержащий все атрибуты созданной сети (идентификатор, название, статус, маску, шлюз, список подключенных серверов). Пример ответа:

{
  "ID":36,
  "Name":"network API",
  "State":"Active",
  "Mask":"255.255.255.0",
  "Gateway":"10.0.0.1",
  "LinkedServers":[{"IP":"10.0.0.3","MAC":"U2:33:33:33:33:33","ServerID":3834}]
}

Чтобы удалить частную сеть, нужно отправить DELETE-запрос на адрес, включающий идентификатор сети:

curl -X DELETE -H 'Content-Type: application/json' -H 'Authorization: Bearer 75bb9805c018b1267b2cf599a38b95a3a811e2ef7ad9ca5ed838ea4c6bafaf50' "https://api.1cloud.ru/network/36"

О создании шаблонов и виртуальных сетей мы подробно рассказывали в этом материале.

Кроме всего вышеперечисленного, благодаря API можно совершать широкий диапазон действий над серверами, например:

  • Получать список всех серверов;
  • Найти конкретный сервер со всеми атрибутами по уникального идентификатору;
  • Изменить конфигурацию сервера;
  • Удалить сервер.

В скором времени мы запустим услугу управления DNS — доступ к ней также будет возможен как из панели управления, так и посредством API.

Примеры реализаций клиентских библиотек


Существует несколько реализаций клиентских приложений для нашего API.


Тем пользователям Хабра, которые захотят воспользоваться нашим API, мы предоставим расширенный тестовый период в ходе которого готовы оказать всяческую поддержку (для его активации достаточно обратиться в службу поддержки по адресу support@1cloud.ru).

Авторам лучших реализаций клиентских частей для API 1сloud на других языках программирования будут предоставлены бонусы в нашей системе. Выкладывайте свои проекты на GitHub и мы обязательно укажем имя автора и ссылку на них на своем сайте.

На сегодня все, спасибо за внимание! Не забывайте подписываться на наш блог, чтобы не пропустить ничего интересного.

Комментарии (4)


  1. centur
    17.06.2015 15:07
    +1

    Мне кажется большинство таких постов уйдут в прошлое тогда, когда компании начнут использовать swagger для описания своих REST API. А из него и документацию можно сгенерить, и клиентов на разных языках, и просто фронтэнд чтобы поиграть с вызовами. Swagger это прекрасный аналог WSDL для RESTful api

    У вас есть?


    1. 1cloud Автор
      17.06.2015 15:18

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


      1. centur
        17.06.2015 15:39
        +1

        Это не совсем приложение, это довольно популярный формат описания api, который позволяет автоматически генерировать запросы в правильном формате. Посмотрите swagger.io
        Например на .NET для генерации интерфейса типа вот такого petstore.swagger.io к WebAPI нужно просто добавить пакет swashbuckle, и все.
        Для генерации клиента к чужому api который имеет описание в формате swagger — вызвать утилиту autorest с парой параметров — и она сгенерирует строго типизированные классы и методы на C#.

        Если пользовались раньше WSDL — это все то же самое только без SOAP & XML, и все кросс-платформенно для REST API

        Помимо этих плюшек, большое количество приложений и сервисов поддерживают Swagger, например PostMan, Runscope и другие…


        1. 1cloud Автор
          17.06.2015 15:43

          Спасибо! Обязательно изучим подробнее