Всем привет! Меня зовут Сергей Константинов, и я руководитель группы разработки алгоритмов API Яндекс.Карт.
Сегодня мы запустили новую версию JavaScript API — 2.0. Вообще, в этом месте должна быть перепечатка поста из блога Яндекса, но мы решили в этот раз отступить от традиции :).
Вместо сухого официального сообщения, я попробую в тёплой ламповой обстановке рассказать вам, как и зачем мы делали JavaScript API 2.0.
Думаю, те из вас, кто знаком с нашим API, легко поймут, что это не косметическое обновление, а полноценный релиз практически нового продукта. Мы полностью переписали ядро, расширили функционал и добавили ряд новых фишек — более глубокую поддержку мобильных устойств, мультиязычность, HTTPS, статистику пробок и т.д. (см. наш промосайт).
Но не фишечки и не новый дизайн сподвигли нас на такую работу. Мы запустили первую версию API в ноябре 2008 года. С тех пор прошло более трёх лет, и наше представление о том, для кого и для чего мы делаем API, несколько изменилось.
Мы всегда представляли себе нашу аудиторию в виде своеобразной пирамиды: основание пирамиды — наши пользователи; средний слой — использующий картографические API бизнес; и вишенка на торте — разработчики.
Первую версию API мы писали в первую очередь для разработчиков. Мы считали, что нам нужно убедить разработчиков выбрать нашу технологию, потому что бизнес доверяет решение о выборе технологии разработчикам, и пользователи, в конечном итоге, увидят именно тот сервис, который сделали для них разработчики.
Как показала практика, тогда это было правильным решением — наше API быстро завоевало рынок. Но время шло, и мы начали понимать, что на практике всё происходит немного иначе, и в этой системе есть обратные связи. Пожалуй, чем-то нам помог пример одной компании с фруктовым логотипом, которая начала выпускать продукт, ориентированный прежде всего на конечного пользователя; пользователь выбрал свой продукт, и бизнес, стремясь удовлетворить своих пользователей, сформировал заказ на разработку под новую платформу.
Мы поняли, что мы делаем продукт не только для разработчиков, но и для пользователей. Если пользователю будет удобно и приятно пользоваться нашими картами и он будет требовать от любимых сервисов использования именно наших карт — вот тогда мы сможем считать свою задачу выполненной.
Проблема в том, что сами мы не взаимодействуем с пользователями напрямую — мы делаем это опосредованно, через разработчиков, использующих наше API. Задача, по большому счету, распалась на два больших блока:
— сделать так, чтобы пользователю было легко и приятно работать с нашей картой;
— сделать так, чтобы разработчики делали на нашем API удобные и красивые сервисы.
Полем для экспериментов стал сервис Яндекс.Карты, где вторая версия API работает с октября прошлого года. Мы очень серьёзно подошли к вопросу look & feel нашей карты и начали настраивать поведение карты под каждый браузер отдельно. Не скажу, что это было просто — в итоге, нам пришлось писать по две-три реализации ключевых интерфейсов.
(На самом деле, пока я готовил этот текст, картинка устарела — нам пришлось вносить некоторые изменения в связи с релизами новых версий браузеров.)
Мы серьёзно озаботились размерами подключаемого кода и выделили из состава API несколько сборок. Теперь ядро весит всего 60 Кб, и принудительно грузится асинхронно.
Наконец, мы сильно освежили дизайн стандартных элементов карты (тулбаров, панели пробок, etc) и меток на карте. Но, разумеется, это всё — только начало. Мы будем на постоянной основе заниматься улучшением внешнего вида, плавности и красивости интерфейсов.
Перейдём ко второй задаче — помочь разработчикам делать хорошие сервисы. Мы всегда старались оперативно отвечать на вопросы в нашем клубе и письма в суппорт, но с релизом API 2.0 мы окончательно поняли, что проблемы разработчиков — это, на самом деле, наши проблемы, и мы должны сделать всё, чтобы их решить. Например, мы полностью перевели всю вёрстку на кастомные тэги (а, точнее, на кастомный тэг — ymaps), чтобы сторонние css-ресеты или стили темы CMS не ломали оформление карт.
Мы стараемся предоставить разработчикам не только API, но и подсказки, как сделать ваш сервис ещё чуть-чуть лучше. Например, попробуйте воспользоваться технологией кластеризации — возможно, ваш сайт станет удобнее и красивее :).
В презентации к моему докладу на конференции РИТ++ про всё это рассказано немного подробнее. Но это, на самом деле, только верхушка айсберга — в версии 2.0 мы имплементировали множество интересных технологических решений — свой touch-фреймворк, каскадную систему опций, одновременный показ нескольких слоёв в разных проекциях (да, на нашем движке теперь можно легко и просто показать, например, тайлы от OSM) и многое другое. Приходите 26 апреля на наш APIшник в офис Яндекса — мы подробно расскажем и покажем, что и как мы сделали нового в API 2.0.
Ну а в качестве заключения хочу кратко сформулировать, зачем же мы всё-таки сделали новый API. Во-первых, потому, что время не стоит на месте, — появляются новые платформы, технологии и рынки, — и приходится очень быстро бежать для того, чтобы просто остаться на месте. Ну а во-вторых, потому что кое-что изменилось в нашем собственном представлении о том, что за продукт мы делаем и для кого.
Вопросы по новому API можно задавать прямо в комментах :)
Автор: SergeyKonstantinov