ПРЕДСТАВЛЯЕМ ESI - НОВЫЙ API ДЛЯ EVE ONLINE
Примечание: данный девблог в первую очередь предназначен для сторонних разработчиков и технически грамотных капсулёров. Если вы хотите пропустить жаргон, прокрутите вниз где найдёте TL;DR
Предыстория
В тот момент когда XML API был впервые опубликован, это было прорывом. До этого момента ни одна видеоигра не предоставляла такого доступа к своим данным, что позволило игрокам сделать удивительные вещи. EVEMon и EFT это легендарные инструменты которые поддерживают EVE годами, и они присоединились к множеству новаторских и действенных решений созданных игроками основываясь на XML API. Но XML API имеет предел, возможность использования только определенных данных, только чтение данных и порой медленное реагирование на внутриигровые события. Серьёзно, протоколирование XML API это тихий ужас, постоянные отставания от реальной версии игры и по сути никакого развития.
И так мы представляем CREST, и это тоже прорыв. Он использует, более понятный формат данных, упрощенный интерфейс и быстрый доступ к оперативному моделированию данных. В конце концов, это открывает путь для записи конечных точек, которое используется повсюду, но впервые в игровой индустрии. Некоторые работы созданные на базе новых возможностей CREST просто ошеломляющие, и мы постоянно слышим о новых и инновационных идеях очень многие из которых могут быть реализованы с использованием новых мощных возможностей CREST.
Также в идеале CREST планируется сделать само индексируемым. Комбинация автоматически генерируемых вызываемых опций и примеров связанных с корневой структурой API обеспечивает фактически полную само индексацию API. Это привело к определенным успехам, и сбор данных CREST API это, безусловно, хороший способ для пользователей изучить его. Однако, выявлены и определенные проблемы. Огромная часть данных не может быть индексированы пока не выполнены определённые игровые условия,такие как правильное определение корпоративных ролей или определение владельца цитадели, и не все ресурсы корректно привязываются. Это довольно трудно объяснить почему у вас нету доступа к определенным вещам. Разработчики CREST до сих пор ссылаются на сторонние протоколы для полного описания API. Это была смелая попытка, но этого явно недостаточно.
CCP всегда был в авангарде API разработок в игровой индустрии, и мы не собираемся останавливаться на достигнутом и почивать на лаврах. Мы видели как хорошо было принято создание CREST и XML API, мы учли критические ошибки, и сейчас наступило время модернизации. Читать ниже…
Тем временем, в целом в игровой индустрии...
За последнии несколько лет, индустрия програмного обеспечения занималась разработкой различных и рассмотрением архитектуры различных API. Сначала из все этого хаоса возникла стандартная схема JSON, а потом уже из неё спецификация Swagger. Это основной концепт ESI, давайте послушаем что сам swagger говорит о себе:
Swagger™это программа используемая для описания и записи RESTful APIs.
Спецификация swagger определяет набор файлов требуемых для описания определенного API. Данные файлы могут быть использованы системой Swagger-UI для отображения API и Swagger-Codegen для создания клиентской части на различных языках. Дополнительные утилиты также могут получать преимущество от полученных в результате файлов, например инструменты тестирования.
Swagger это широко применяемый стандарт описания API, и поддерживается несколькими авторитетными компаниями, что даёт определённую уверенность в его долговечности и поддержке клиентских библиотек, пользовательского интерфейса и прочих инструментов. Выбор спецификации Swagger (сейчас известной как OpenAPI) избавляет нас от лишней работы, и дает нам четкий ориентир для построения в отличии любой пользовательской конфигурации.
Это тот фундамент который мы выбрали для построения EVE Swagger Interface, тот каркас объединяющий части спецификаций из многочисленных служб Kubernetes в единый механизм, который в тоже время занимается маршрутизацией, аутентификацией, вводом/выводом данных, и многими другими функциями.
EVE Swagger Interface (кратко ESI, произносится "изи") использует Flask и Python 3.4+ внутренне, а возможность использовать обобщённые настройки достаточна для поддержки любых внешних (или неавторизованных), многопользовательских API работающих в кластерах Kubernetes.
Чем является ESI для нас?
В течении последних нескольких месяцев, мы использовали и развивали платформу ESI для построения новых API с нуля. ESI API это ESTful, SSO авторизация, первичное индексирование, совместимость с основными шаблонами, горизонтально масштабируемые, читаемо/записываемые API. Всё это позволило вернуть мобильное приложение EVE и запустило кластер Kubernetes в Google Cloud (Kubernetes is невероятен btw). Что чёрт возьми всё это значит?
RESTful и SSO авторизация означает, что вы будете работать с новой системой во многом так же, как и с CREST. Если вы планируете использовать токен авторизации для своих HTTPS запросов, и если до этого вы работали с системой разработки CREST, то вы не будете испытывать не никаких проблем при работе с новой системой
Первичное индексирование означает что внутри системы мы использовали инструкции Swagger’а для генерации наших APIs. Первый шаг для создания или обновления конечного результата какого-либо действия это создание или обновления соответствующей инструкции, что определяет всю нашу внутреннюю структуру данных для обработки конечного результата, и это значит что протоколы данных всегда обновлены потому что они интегрированы с основной частью кода конечного результата. Don't look now, but we might have solved this documentation gremlin. В дополнение к всему инструменты Swagger позволяют сторонним разработчикам использовать свой код для создания интерфейса для ESI API на том языке который они выберут. Огромный кусок времени разработчика который раньше тратился на построение интерфейса для CREST и XML API теперь освобожден от этой шаблонной работы. (мы заменили вас на роботов, простите.)
Совместимость с основными шаблонами означает что мы использовали основные инструменты индустрии разработки. Мы постарались добавить по минимуму специальных инструментов только там где без этого не обойтись, в остальном же мы старались заменять кастомные вещи на готовые стандартные опенсорс решения когда это было возможно. Ещё никогда EVE API не был так лёгок в обслуживании и масштабировании, что открывает недоступные ранее возможности. Небольшие патчи могут отправляться с компьютера разработчика к его приложению в течении минут, и если это необходимо все изменения могут быть с практически нулевой задержкой откатаны назад в любом направлении.
Горизонтальное масштабирование - это изящное решение которое мы позаимствовали у Kubernetes. Так как все ESI коды которым не требуется быть специально запущенными на нашем сервере Транквилити, а также не требуется запуска на Google Cloud, мы можем управлять подключением новых ESI контейнеров на каждый результирующий базис которому это необходимо, и выключением этих компонентов когда они больше не нужны.
Чтение/запись, конечно мы планируем сделать читабельные API результирующие почти как в CREST, включая те которые проблематичны даже сейчас,это будет так же просто как отправить е мэйл. В общем это как CREST только лучше.
Так что насчёт старых XML API и CREST?
Ещё рано паниковать. Мы пришли сюда не для того чтобы объявить о том что мы незамедлительно уничтожим все ваши приложения и вам необходимо немедленно переписать весь код, но мы считаем нужным обсудить приведение кода в порядок и его фрагментирование. Поддержка тройки API с похожим , но не пересекающимся функционалом увеличивает техническую сложность создания рабочих EVE API моделей, и это забирает время у тех. группы которые они бы потратили на разработку новых инструментов и обслуживание нового инструментария. Всё это уменьшает гибкость и увеличивает нестабильность, и это не есть хорошо в плане долгосрочного развития.
Как только мы воссоздадим все текущие возможности CREST и XML API в ESI, мы сразу же закроем оба этих сервиса. Мы запланировали 18 месяцев от релиза этого блога до достижения ESI требуемого функционала и мы будем работать с разработчика приложений для апгрейда их продуктов. Удаление необходимости использования XML API наша главная цель. Мы будем следить за использования XML API и CREST для идентификации и помощи разработчикам сторонних программ в их переходе на новую систему.
Это будет аккуратный и планомерный уход от старой системы. Первым шагом этого процесса является то что с момента выхода этого блога, CREST и XML API официально находятся только в режиме поддержания в рабочем состоянии.
Мы будем продолжать выпускать обновления для защиты данных и исправления критических ошибок к ним, но все новые запросы будут исполнятся ESI API.
Ранний доступ
В течении последнего месяца мы плотно работали с несколькими активными членами сообщества разработчиков сторонних сервисов для EVE, включая:
-
Steve Ronuken, член CSM и создатель fuzzwork.co.uk
-
Lucia Denniard, активный постер #devfleet pizza-auth разработчик/timerboard.net
-
Squizz Caphinator, создатель zkillboard.com и evewho.com
Мы взаимодействовали с этими командами , так же как и с фокус группами , для получения отзывов на раннии этапы развития проекта и некоторые первоначальные проектные решения. Ниже вы можете увидеть что они могут сейчас сказать о своих впечатлениях:
Введение ESI, как нового API, довольно близко к тому как работает CREST, поэтому переход на новую систему должен пройти довольно таки легко. Также это решает проблему главного “пугала” разработчиков API приложений для EVE. Нехватки документации и примеров. Использование Swagger облегчит работу с API, и уберет проблему некоторых несоответствий из списка проблем разработчиков. Наконец открыта возможность отправлять EVEMail, так же как и получать их, это большой прорыв, что допускает возможность создавать некоторые автоматизированные сервисы , что раньше было невозможно.
- Steve Ronuken
ESI это решение проблемы над которой CCP билось несколько лет: возможность быстро и легко обновлять API для сторонних разработчиков. Последнии несколько недель разработчики с которомы я работал показывали какой ESI адаптируемый, а также ка в него легко добавлять новые возможности. Я знаю множество сторонних разработчиков не очень рады перспективе переписывания множества своих утилит, и я один из них, но эта та цена которую придётся заплатить за технический прогресс. CCP уводит от технической отсталости и ведёт нас в направлении технического прогресса. EveWho.com уже использует утилиты на базе ESI и я тихо радуюсь результатам их работы.
- Squizz Caphinator
EVE Swagger Interface объединяет возможности XML AP с инновациями CREST в то время как введение в документацию является официальной фичей. CREST’о подобные системы позволили людям делать замечательные вещи с динамическими языками (имеются в виду языки программирования , я так думаю - прим. пер.), ESI ближе тем из нас кто любит использовать статические языки; предоставляя более строгий разрешенный интерфейс и улучшая пользовательские аспекты CREST. Я верю что этот проект прекрасная возможность последующего улучшения CREST, модернизации XML API, и разработка приложений для EVE станет более доступна для новичков.
- Lucia Denniard
TL;DR
Новый API приходит в EVE, его зовут ESI. Он основывается на OpenAPI Specification, полностью документирован и сделает вашу жизнь проще если вы захотите сделать приложение для EVE Online. Он будет вводиться в течение нескольких месяцев, и уже сейчас обрабатывает до 4,5 миллионов запросов в день.
Если вы не являетесь разработчиком приложений , то в течении следующего года или двух вы с можете заметить что приложения которые вы используете начинают уходить от API ключей и переходить на EVE SSO. Это дает преимущества в безопасности, и уменьшает сложности авторизации в приложениях.
Новый подход уже используется в новом EVE mobile app, так же как и программах сторонних разработчиков. Вы можете проверить это на себе прямо сейчас, перейдя по ссылке https://esi.tech.ccp.is/
Вопросы, комментарии, проблемы? Мы будем следить за темой как на EVE Online forums так и на Reddit, или ловите кого-нибудь из команды разработчиков в tweetfleet slack (@ccp_snowedin, @ccp_bartender, @ccp_aquarhead, @ccp_chimichanga), мы всегда где то рядом с каналом #devfleet. Также мы открываем новый канал специально для обсуждения ESI и помощи, также в tweetfleet slack, канал называется #ESI.
В славное будущее!
PS: если вас всё ещё интересует дезайн ESI, загляните в следующий блог Introducing the ESI API.
Кстати товарищи кто разбирается в предмете смело указывайте на ошибки. Поправлю.
Сообщение отредактировал Deornot: 05 December 2016 - 13:47