Wargaming Public API

    Wargaming Developers Partner Program
Wargaming.net Public API — набір загальнодоступних програмних інтерфейсів, які надають доступ до проектів Wargaming.net, включаючи ігровий контент, статистику гравців, дані енциклопедії та багато іншого.
 
У цій статті ми розповімо про передумови створення публічного API, організації взаємодії наших внутрішніх компонентів, про те, як побудований і працює API, і трохи про конкурс розробників, який збираємося в самому найближчому майбутньому провести.
 
 Історія розвитку публічних API
Перед тим як писати розділ про передумови створення API Wargaming, я вирішив трохи актуалізувати своє уявлення про те, як в принципі розвивалися публічні API, щоб пошукати кореляції і оцінити еволюцію API як явища. Дозволю собі зробити коротку вичавку, так як мені ця інформація здалася дійсно цікавою.
 
 
     
  • 7 лютого 2000 — запускається salesforce.com, з першого ж дня пропонуючи користувачам досить повний і функціональний API до своїх програм. Фактично, ці хлопці були першими, хто запропонував формат software-as-a-service своїм користувачам.
  •  
  • 20 листопада 2000 — в рамках програми eBay Developers Program запускається eBay Application Program Interface. Де-факто, це був вимушений крок, оскільки значна кількість різних додатків, так чи інакше витягали інформацію зі сторінок eBay.
  •  
  • 2002 — Google запускає API до свого пошуку. Причини ті ж — розробники активно намагаються використовувати інструментарій пошуку Google в своїх додатках і роблять це як виходить. Значним відмінністю від попередніх провайдерів API є те, що не дуже зрозуміло, як такий API можна ефективно монетизувати. Конкуруюча на той момент з Google AltaVista, однак, свій API запускати не поспішає, «чекає появи попиту», за словами їх технічного директора.
  •  
  • 2003-2006 роки — починають активно розвиватися соціальні сервіси. З'являються API del.icio.us, Flickr, Facebook, Twitter, etc.
  •  
  • 29 червня 2006 — поява API Google Maps. Причини знову ті ж: годинне Google Maps так швидко набрали популярність, що їх внутрішній JavaScript API негайно розібрали на гвинтики і почали використовувати кому як подобається.
  •  
  • 2006 — розвиток хмарних сервісів і, відповідно, їх API: Amazon S3, Amazon EC2 і т.д.
  •  
  • 2007 — запускається Twilio, API-as-a-product платформа, що надає своїм користувачам API до хмарного сервісу голосового зв'язку.
  •  
  • березня 2009 — запускається Foursquare, а вже в листопаді після раунду фінансування запускається і API Foursquare.
  •  
  • жовтня 2010 — запуск Instagram. Вже в грудні один з сторонніх розробників розібрав API, яким користувалося iPhone-додаток, і випустив свій неофіційний Instagram API. У січні 2011 року Instagram закрив піратський API і оголосив, що працює над власним офіційним API, який і випустив у лютому.
  •  
 
 
Таким чином виходить, що спочатку основним драйвером розвитку API були майданчики онлайн-торгівлі, потім настало певне затишшя. Далі естафету підхопили API соціальних сервісів, хмарні і мобільні API.
 
Року десь з 2005 спостерігався взагалі вибухонебезпечне зростання кількості всіляких API. Ось картинка з ProgrammableWeb, це підтверджує:
 
 
 
 Передумови створення Wargaming Public API
Як видно з історичної довідки в попередньому розділі, найчастіше причиною створення API є активність сторонніх розробників. Вони користуються тими інструментами, які є, для того щоб отримати ті дані, які їх цікавлять. При цьому їх не особливо зупиняє відсутність API. Веб організований так, що завжди можна розпарсити цільової сайт і дістати потрібну інформацію. Так, незручно. Так, все ламається, як тільки розмітка сторінки змінилася. Та й взагалі купа складнощів. Але тим не менш.
 
Причому, така картина не влаштовує не тільки сторонніх розробників. Велика кількість запитів, скануючих інформацію з сайту, цілком можуть створювати пристойне навантаження на сервера, а то й повністю «укласти» сайт. Особливо якщо врахувати, що додаток, як правило, оптимізується під поведінку користувача, а не краулер.
 
Власне, в цьому плані Wargaming нічим не відрізняється — як тільки "танки" стали популярними, відразу ж виник попит на інформацію за профілями гравців, кланам, статистикою, рейтингам, глобальній карті, енциклопедій і т.д. Зрозуміло, почався парсинг сайтів в спробах витягнути ці дані. А як тільки вийшов World of Tanks Assistant, на його API негайно накинулися стражденні.
 
Зробити висновок з усього цього було нескладно: раз інформація стороннім розробникам потрібна, вони все одно її добудуть. Але краще в такому випадку надати їм публічний API. Керувати ним набагато простіше, він надає більш стабільний, зручний і надійний інструмент розробникам, а нам як мінімум дозволяє економити трафік і знижувати навантаження за рахунок більш оптимізованих алгоритмів під такі сценарії використання.
 
Крім того, коли є публічний API, додатки виходять більш функціональними, стабільними, надійними. Кінцеві користувачі задоволені, а навколо гри з'являється ще більша кількість якісних додатків, що важливо і її розробнику.
 
 Внутрішня взаємодія компонентів «позаду» API
Для того щоб зрозуміти принцип роботи нашого API, корисно поглянути на те, як усередині побудовані інформаційні потоки, як забезпечується доставка даних, їх актуальність і т.п. Тому нижче — коротко про внутрішню організацію взаємодії компонентів.
 
Вся наша інфраструктура навколо ігор побудована за сервісної моделі, тобто компоненти відносно незалежні і взаємодіють між собою через набори API. Обумовлено це кількома чинниками:
 
 
     
  • навіть якщо щось падає, все інше має працювати;
  •  
  • компонентів багато (сервіс аутентифікації, OpenID-провайдер, система рейтингів, кланові сервіси, Світова Війна, Wargaming League, ігрові портали, форуми, енциклопедія, ЦПП і так далі — всього близько 40 штук);
  •  
  • компоненти розробляються різними командами;
  •  
  • компоненти не релізів всі разом;
  •  
  • повний простої системи при оновленні неприпустимий.
  •  
Тобто очевидно, що випустити версію двох-трьох компонентів, що розробляються окремо, значно простіше, ніж робити реліз великий за розмірами системи. Крім того, спрощується і керування розробкою компонентів як невеликих функціональних елементів.
 
 Принципи взаємодії
У нашій інфраструктурі є два основних потоку даних: виклик віддалених методів API і підписка на події іншої підсистеми (ігрового сервера, інших компонентів).
 
API компонента найчастіше представляє собою HTTP REST API. Виклик API може повертати відповідь як синхронно, так і асинхронно. Для асинхронних відповідей використовується Message Broker (RabbitMQ в нашому випадку) по протоколу AMQP.
 
Події також ганяються через RabbitMQ. Прикладом події може служити експорт стану аккаунта гравця після його зміни. Крім того, наприклад, після кожного бою в MQ експортується досьє танка гравця, на якому він цей бій грав. Це дозволяє ігровому порталу показувати актуальну статистику гравця, коли б він не зайшов її подивитися (ну, майже). При цьому і без того завантажений ігровий сервер не отримує додаткового навантаження.
 
Якщо трохи відійти від реальності заради простоти сприйняття, то вийде ось така картинка, що описує принципи взаємодії наших компонентів у вебі:
 
Відмінності від реальності полягають у тому, що як такої сервісної шини у нас немає. Кожен компонент чітко знає про те, де розташовані потрібні йому API інших компонентів, і взаємодіють вони напряму, без жодних проміжних ланок.
 
Приблизно така ж картина і з подієвої шиною — кожен компонент точно знає, як йому підключитися до брокера, щоб отримувати або публікувати ті чи інші повідомлення.
 
Public API — точно такий же компонент в цій інфраструктурі, як і будь-який інший. Деяка відмінність полягає хіба в тому, що він зав'язаний на відносно велику кількість інших сервісів, тобто є таким собі фасадом до всієї екосистемі, якщо говорити про структурні шаблонах проектування.
 
Зрозуміло, Public API — це не просто проксі-сервіс, у нього є своя додаткова логіка, він може кешувати і зберігати у себе деякі набори даних для оптимізації швидкості відповіді і навантаження на внутрішню систему. Йому також потрібно перевіряти права доступу і стежити за лімітами звернень від того чи іншого додатка, збирати статистику і т.д. Оскільки API — публічний, чимало коду написано тільки заради збереження зовнішнього контракту та ізоляції змін внутрішніх компонентів і їх API від зовнішніх споживачів.
 
 Трохи статистики
Потрібно сказати, що з введенням Public API як мінімум одну з нагальних проблем ми вирішили — нехарактерна навантаження на наші ресурси, яка періодично сильно нам псувала життя, значно знизилася. Вірніше, перетекла в API, де її набагато простіше контролювати і забезпечувати надійність роботи як системи в цілому, так і сервісу для сторонніх розробників.
 
Ось трохи актуальних цифр для RU-реалма:
                          
Метод API Кількість викликів за 7 днів
api.worldoftanks.ru / wot / account / tanks ~ 13800000
api.worldoftanks.ru / wot / account / info ~ 13100000
api.worldoftanks.ru / wot / tanks / stats ~ 7360000
api.worldoftanks.ru / wot / ratings / accounts ~ 5800000
api.worldoftanks.ru / wot / clan / info ~ 3800000
         
Користувачі, які заходили в кабінет розробника зі старту програми 63750
Зареєстровані ключі додатків 12029
Додатки
Всього активних на поточний момент додатків — більше 200. Цифри не найбільші, але серед додатків багато гідних, а на деякі, навіть за дуже грубою оцінкою, витрачено порядно часу і зусиль. Наприклад:
 
 
     
  • мобільний додаток «База знань для WoT»;
  •  
  • портал wot-news.com;
  •  
  • численні стовбурові, олені-та інших нубометри;
  •  
  • кланові сайти;
  •  
  • стат-сайти: vbaddict.com, wotinfo.net, wotlabs.net та багато інших;
  •  
  • кланові сайти і сайти з інформацією про Глобальній карті ;
  •  
  • ігрові моди, той же XVM (куди вже без нього).
  •  
Не всі сторонні сайти і додатки зараз використовують API. Наприклад ті, які з'явилися раніше релізу партнерської програми, або ті, кому поточного набору інтерфейсів з якихось причин недостатньо. Але для багатьох з них перехід на API був би більш ніж доречний.
 
До речі, Wargaming зовсім не проти того, щоб хороші додатки монетизувати і приносили дохід своїм розробникам.
 
 Developers Partner Program
Public API — частина значно більшою історії, ніж просто API до наших даними і сайт з документацією. Це ще й інструмент збору зворотного зв'язку та підтримки розробників.
 
В рамках цього проекту ми також хотіли б зібрати розробників ігрових модов і спробувати налагодити з ними конструктивний діалог. Якщо API до даних зараз закриває багато потреб розробників, то у мододелов життя сильно складніше. Сподіваюся, нам вдасться зробити її трохи приємніше. Власне, саме тому весь проект цілком називається Wargaming Developers Partner Program, а не просто Public API.
 
 Конкурс
Зараз ми готові перейти до наступного етапу підтримки проекту та взаємодії з ігровим співтовариством — відкритим конкурсом для розробників.
 
Wargaming Developers Contest буде спрямований на підтримку розробників ігрових модов, додатків і околоігрових сервісів. Ми впевнені, що в співтоваристві багато амбітних хлопців і їм під силу зробити закінчені проекти, що реалізують ідеї, які Wargaming ще не бачить або реалізація яких відкладається в довгий ящик. Це може бути що завгодно: інтеграція з різними платформами і інтерфейсами інших сервісів, по-хорошому божевільні користувальницькі інтерфейси, концепція другого ігрового екрану і багато іншого.
 
Для всього цього в рамках Wargaming Developers Contest ми приготували відмінний призовий фонд; крім того, унікальні та оригінальні проекти ми обов'язково представимо нашої багатомільйонної аудиторії.
 
Про подробиці конкурсу, призових категоріях, призовому фонді та порядок реєстрації ми розповімо вже наступного тижня.
 
Слідкуйте за новинами!
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.