В нашем блоге мы уже рассказывали про 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.
- На C# — код на гитхабе (благодарность за создание partyz0ne);
- На PHP — код на гитхабе (благодарность wapmorgan);
- На node.js — код на гитхабе (благодарность serkamikadze).
Тем пользователям Хабра, которые захотят воспользоваться нашим API, мы предоставим расширенный тестовый период в ходе которого готовы оказать всяческую поддержку (для его активации достаточно обратиться в службу поддержки по адресу support@1cloud.ru).
Авторам лучших реализаций клиентских частей для API 1сloud на других языках программирования будут предоставлены бонусы в нашей системе. Выкладывайте свои проекты на GitHub и мы обязательно укажем имя автора и ссылку на них на своем сайте.
На сегодня все, спасибо за внимание! Не забывайте подписываться на наш блог, чтобы не пропустить ничего интересного.
centur
Мне кажется большинство таких постов уйдут в прошлое тогда, когда компании начнут использовать swagger для описания своих REST API. А из него и документацию можно сгенерить, и клиентов на разных языках, и просто фронтэнд чтобы поиграть с вызовами. Swagger это прекрасный аналог WSDL для RESTful api
У вас есть?
1cloud Автор
Знакомое приложение, да. Но нет, мы в данный момент ее не используем. Впрочем, спасибо за предложение, вполне вероятно, что в следующих версиях предоставим и данную возможность.
centur
Это не совсем приложение, это довольно популярный формат описания api, который позволяет автоматически генерировать запросы в правильном формате. Посмотрите swagger.io
Например на .NET для генерации интерфейса типа вот такого petstore.swagger.io к WebAPI нужно просто добавить пакет swashbuckle, и все.
Для генерации клиента к чужому api который имеет описание в формате swagger — вызвать утилиту autorest с парой параметров — и она сгенерирует строго типизированные классы и методы на C#.
Если пользовались раньше WSDL — это все то же самое только без SOAP & XML, и все кросс-платформенно для REST API
Помимо этих плюшек, большое количество приложений и сервисов поддерживают Swagger, например PostMan, Runscope и другие…
1cloud Автор
Спасибо! Обязательно изучим подробнее