Головна / Дев блог / Представляємо ESI – новий API для EVE ONLINE

Представляємо 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. Перший крок для створення або поновлення кінцевого результату будь-якого дії це створення або поновлення відповідної інструкції, що визначає всю нашу внутрішню структуру даних для обробки кінцевого результату, і це значить що протоколи даних завжди оновлені бо вони інтегровані з основною частиною коду кінцевого результату. Do not 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, включаючи:

Ми взаємодіяли з цими командами, так само як і з фокус групами, для отримання відгуків на ранні етапи розвитку проекту і деякі початкові проектні рішення. Нижче ви можете побачити що вони можуть зараз сказати про свої враження:

Введення ESI, як нового API, досить близько до того як працює CREST, тому перехід на нову систему має пройти досить таки легко. Також це вирішує проблему головного “лякала” розробників API додатків для EVE. Нестачі документації і прикладів. Використання Swagger полегшить роботу з API, і прибере проблему деяких невідповідностей зі списку проблем розробників. Нарешті відкрита можливість відправляти EVEMail, так само як і отримувати їх, це великий прорив, що допускає можливість створювати деякі автоматизовані сервіси, що раніше було неможливо.
– Steve Ronuken

ESI це рішення проблеми над якою CCP билося кілька років: можливість швидко та легко оновлювати API для сторонніх розробників. Останні кілька тижнів розробники з котороми я працював показували який ESI адаптуємий, а також як в нього легко додавати нові можливості. Я знаю безліч сторонніх розробників не надто радіють перспективі переписування безлічі своїх утиліт, і я один з них, але це та ціна яку доведеться заплатити за технічний прогрес. CCP веде від технічної відсталості і веде нас в напрямку технічного прогресу. EveWho.com вже використовує утиліти на базі ESI і я тихо радію результатам їх роботи.
– Squizz Caphinator

EVE Swagger Interface об’єднує можливості XML API з інноваціями 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.

Читайте також

Два ревенанта знищено в регіоні The Forge

13-го жовтня близько 1900 за часом Єви в системі Oijanen регіону The Forge став доступним …

Залишити відповідь