Одной из сильных сторон VMware vSphere является обширное количество API, которые позволяют управлять платформой. Более тысячи API, варьирующиеся от основных операций с виртуальными машинами до виртуализации хранилищ и сетей, от кластеризации до управления ресурсами, позволяют организациям любого размера настраивать vSphere под свои конкретные потребности и автоматизировать различные рабочие процессы для экономии времени и средств.
С момента их появления более 15 лет назад, API управления виртуальной инфраструктурой (VI) обрели широкое применение. Множество продуктов и бесчисленное количество скриптов разработаны с учетом этих API, и многие разработчики знакомы с их моделью разработки. В то же время, VI API основаны на протоколе SOAP, который в свою очередь разработан на основе XML. Несмотря на свою мощь, за годы XML доказал свою сложность как формат данных, имеющий свою долю проблем с безопасностью. Учитывая эти проблемы, разработчики и системные дизайнеры прибегают к JSON в качестве замены XML в области API.
Чтобы удовлетворить спрос и облегчить интеграцию в окружения, работающие только с JSON, начиная от веб-браузеров и до современных языков программирования, таких как Go, VMware представила новый протокол, основанный на JSON и похожий на REST, под названием VI/JSON.
Новый протокол является современной альтернативой устаревшему SOAP и предоставляет те же VI API на тех же эндпоинтах, с той же моделью безопасности. Одной из главных целей нового протокола VI/JSON является максимальное облегчение перехода от SOAP для новых пользователей VI API. Кроме того, для приложений, основанных на SDK, миграция на VI/JSON может быть выполнена полностью на платформе с минимальными изменениями в приложении.
В дополнение к полной обратной совместимости API, новый протокол предоставляет прямой доступ к так "managed properties" - почти 300 типов записей, представляющих состояние различных виртуализованных элементов, управляемых vSphere, начиная от виртуальных машин до сетей, хостов, кластеров и т.д. Ранее управляемые свойства были доступны только косвенно через многофункциональный инструмент Property Collector. Сегодня простой HTTP GET-запрос может получить доступ ко всем управляемым свойствам.
Для VI/JSON, похожесть на REST означает, что управляемые ресурсы и операции кодируются в URL-адресе запроса, а не в теле сообщения, как требуется в SOAP. Это изменение предоставляет множество преимуществ: упрощает интеграцию в сетевых экранах на уровне API, облегчает анализ трафика и упрощает написание скриптов. Аналогично, кодировка данных на основе JSON облегчит разработку для многих пользователей VI API.
И наконец, улучшены также и аспекты безопасности. Вместо использования HTTP-кук для идентификации сессии, новый протокол использует специальный HTTP-заголовок, предотвращающий классическую атаку, известную как межсайтовая подделка запроса (Cross-Site Request Forgery), когда третья сторона может украсть идентификационные данные пользователя.
Чтобы дать представление о новом протоколе, вот такой запрос может быть использован для включения виртуальной машины (заголовки протокола HTTP опущены для краткости):
POST /sdk/vim25/8.0.1.0/VirtualMachine/vm-42/PowerOnVM_Task
Эквивалентный запрос SOAP выглядит следующим образом. Обратите также внимание на обязательное тело, которое не требуется для простых запросов VI/JSON.