Мечты Об Идеальном Api Или Как Преодолевались Трудности В Проекте Adhands

Пользователи привыкли к принципу одного устройства и одного интерфейса.

Эта тенденция отражается и в бизнесе: многофункциональные корпоративные системы и порталы, единые торговые и закупочные платформы и т.д. Интернет-реклама не осталась в стороне – разрабатываются сервисы, направленные на существенную оптимизацию работы рекламодателей и рекламных агентств.

И одним из серьезных технических вопросов при создании дашбордов и агрегаторов статистики остается работа с API — программным интерфейсом, через который происходит обмен данными между системами.

Существует ли API вашей мечты, как его создать и зачем он нужен?

Мечты об идеальном API или как преодолевались трудности в проекте AdHands

Реклама в Интернете проходит сразу по нескольким каналам и размещается на многих площадках для охвата как можно большей аудитории.

Управление кампанией осуществляется через интерфейсы различных рекламных систем (Яндекс.

Директ, Google AdWords, система размещения ВКонтакте и др.

).

Каждый раз для просмотра статистики нужно авторизоваться, переключиться, а если есть необходимость сравнить статистику с разных сайтов, то еще и агрегировать данные в таблицах Excel или вручную импортировать данные в Google Analytics. Realweb лучше всех знает о необходимости удобной и эффективной работы с данными интернет-рекламы: мы управляем сотнями клиентов с десятками тысяч кампаний, поэтому наглядное представление статистики является для нас критически важным фактором.

Для этого мы используем систему сбора рекламной статистики.

AdHands .

Это своего рода дашборд: информация по всем рекламным кампаниям агрегирована в едином интерфейсе.

Такой подход обеспечивает удобство, широкие аналитические возможности и точное понимание того, какая реклама эффективна, а какая нет. В случае с рекламой в Интернете оценить «выхлоп» от нее крайне сложно.

На дворе 21 век, господа! А для измерения эффективности рекламы в Интернете есть интересные функциональные инструменты, готовые работать через API со всеми сервисами.



AdHands – длинные руки онлайн-рекламы

AdHands — одно из таких решений.

Это система, которая подключается к платформам интернет-рекламы (Яндекс.

Директ, Яндекс.

Маркет, Google Adwords, ВКонтакте, [email protected], DoubleClick Bid Manager, Яндекс.

Аукцион и др.

) через API.

Мечты об идеальном API или как преодолевались трудности в проекте AdHands

Мы долго думали о том, какой должна быть единая система управления рекламными кампаниями в Интернете.

В результате было решено разработать систему, способную решить сразу несколько проблем.

Первой и главной особенностью AdHands стал единый интерфейс доступа ко всей собранной статистике — это решение позволило исключить необходимость каждый раз авторизоваться и работать в разных графических интерфейсах.

В результате получается единая удобная панель, дашборд, на котором в доступной форме представлены все необходимые рекламные показатели.

Конечно, никакая статистика не имеет практической ценности, если она не агрегирована и не обработана должным образом.

В систему добавлена возможность автоматического расчета стоимости цели, заказа, звонка и расчета ROI. Введено медиапланирование – ценная функция для тех, кто управляет чужими бюджетами или имеет в компании строгую систему бизнес-планирования, в рамках которой необходимо заранее рассчитывать маркетинговый и рекламный бюджет. AdHands работает для конечного пользователя, делая его жизнь намного проще.

Однако при создании самой системы возникает ряд сложностей из-за того, что приходится взаимодействовать с различными внешними системами.



Работа с API – наведение мостов

Всем известно, насколько сложен мир программирования и разработки — несмотря на создание постоянных описаний стандартов и попытки достичь соглашения, каждый разработчик привносит в код что-то свое.

В случае с API это иногда ставит в тупик разработчиков внешних систем, например AdHands. Расскажем подробнее о том, с чем мы столкнулись при использовании чужих API при создании нашей системы управления интернет-рекламой.

Работая со сторонними системами, мы разработали ряд критериев, по которым определяем, насколько удобна система, которую мы подключаем к AdHands. Грубо говоря, такая система должна быть в первую очередь удобной с точки зрения разработчика.

А если рассматривать конкретно, то важно, чтобы подключаемая система соответствовала нескольким параметрам.

  • Стабильность системы – его доступность 99,9% времени года.

    Наверное, нет необходимости объяснять, насколько это важно для системы, которая собирает и передает данные об онлайн-рекламных кампаниях, которые ежесекундно транслируются по всему Интернету.

  • Наличие документации – абсолютно критическое требование.

    Понять API без документации крайне сложно, особенно если приходится иметь дело с ошибками и нештатными ситуациями.

    Нужно понимать, что API на самом деле представляет собой чужой код, и несмотря на стремление крупнейших онлайн-платформ к универсальности, счастливое будущее еще далеко и API должно сопровождаться подробной документацией разработки, как, например, как реализовано в Google AdWords и Яндекс.

    Директ.

  • Поддержка авторизации OAuth 2.0 – удобный и безопасный открытый протокол авторизации.

  • Отзывчивая техническая поддержка система, конечно, не может быть требованием, но это желание – к сожалению, не всегда можно быстро получить квалифицированный ответ. А решение задач в таких системах, как AdHands, требует максимальной эффективности, чтобы не потерять лояльность клиентов.

  • Понятность – Методы и функциональность API должны семантически соответствовать тому, что они делают. Например, метод «добавить пользователя» должен добавить пользователя без решения ряда других задач.

Конечно, в идеале хотелось бы, чтобы все подключенные системы имели единый, универсальный API и один код, который использовался бы для всех систем.

Определенные шаги в этом направлении уже сделаны, но до полного объединения пока так далеко, что оно кажется пока невозможным.



Работа с API – поговорим о проблемах

Разница в терминологии платформ API – разные системы могут не иметь объектов или иметь разные имена.

Например, недавно в Яндекс.

Директе появилась сущность «группа объявлений», а долгое время до этого такая сущность была только в AdWords. Аналогичная ситуация возникает, например, с термином «креатив», который встречается в БайЯне и ДБМ, но на самом деле для разработчика творчество в этих двух системах — разные сущности.

Преодоление таких несоответствий требует времени и поэтому необходимо искать решение путем построения специальной архитектуры AdHands. Однако эта проблема не столь существенна, как другие.

Различия в структуре данных - проблема, возникающая из-за различий в структуре самих сайтов (опять же, например, может не быть групп объявлений).

Это важный вопрос для AdHands, потому что мы не копируем системные интерфейсы в одно приложение, а собираем данные, чтобы представить их пользователю.

Я не хочу каждый раз менять структуру страницы, подстраиваясь под системы.

Мы обходим проблему, сводя данные из разных источников в единую структуру.

Фактически мы создаем схожие по структуре иерархии и гибридные решения, когда сущность остается доступной при выборе одной системы и закрыта для других.

AdHands достигает единообразия и удобства интерфейса за счет абстрагирования сущностей.

Все разработчики по-разному подходят к документации: кто-то подробно документирует каждую переменную, кто-то описывает ее в общих чертах, а кто-то вообще отказывается от какой-либо документации.

При работе с API внешней системы наличие подробной документации — залог успеха.

Однако даже при наличии подробных мануалов и сообщества разработчиков возникают проблемы, среди которых главной является несоответствие документации реальному положению дел : Иногда случается, что документация, интерфейс программы и графический интерфейс пользователя расходятся.

Как правило, это связано с тем, что API меняется и дополняется довольно быстро, а документация обновляется медленнее, поэтому может найти устаревшие функции или не найти часть новых возможностей.

В идеале выпуск новой версии API происходит одновременно с выпуском документации.

По опыту Realweb можно сказать, что документации, не соответствующей действительности, практически нет. Однако здесь вступает в игру человеческий фактор, и иногда из-за отсутствия уведомлений и рассылок об изменениях становится известно не сразу.

Каждая система API периодически меняется и совершенствуется.

Постоянное изменение API само по себе является необходимым явлением — интерфейс ПО развивается вместе с системой.

Плохо, если внесены изменения, но, допустим, сигнатура методов не изменилась.

Было бы неплохо, если бы при обновлении API все библиотеки обновлялись по расписанию.

Несоответствие API и интерфейса – Проблема не очень распространенная.

Конечно, поставщик API понимает, что сущности как для интерфейса приложения, так и для пользовательского интерфейса должны быть одинаковыми.

Бывает, что API не предоставляет методов для некоторых элементов GUI. Если в интерфейсе программы отсутствуют какие-то сущности, приходится создавать псевдосущности — кучу, чтобы вписаться в универсальную структуру AdHands. Крайне редко, но все же случается, что API вообще нет .

Например, с такой ситуацией мы столкнулись при работе с системой размещения медийных баннеров Яндекса.

В таких случаях вам придется проанализировать интерфейс с помощью сканера и войти в систему как пользователь, используя комбинацию логина и пароля.

Здесь возникает главный камень преткновения, если меняется графический интерфейс пользователя — меняется макет, парсер возвращает ошибки.

Но, в основном, все современные системы предоставляют доступ через API. Но те, кто не готов предоставить адекватные библиотеки и документацию, рискуют остаться вне конкуренции.

Отсутствие удобной и универсальной авторизации OAuth 2.0. – проблема, которая продолжает возникать.

Как вы знаете, протокол авторизации OAuth 2.0 находится в стадии разработки.

Характеристики Впрочем, он уже вполне готов заменить OAuth. Это удобный протокол, который прост в использовании, лишен длинной цепочки запросов и сложных схем подписи.

Некоторые сайты и рекламные агрегаторы его пока не используют, видимо, ждут стабильной спецификации.

Это существенно усложняет процесс авторизации и аутентификации при запросе данных из внешних систем и передаче данных.

Например, БаЯн от Яндекса работает на токенизации по логину/паролю.

С точки зрения разработчика это не совсем безопасно, так как может нанести существенный ущерб, если база данных, в которой хранятся логины и пароли для доступа к BaYan, будет скомпрометирована.

Сегодня большинство крупных систем уже перешли на OAuth 2.0. Помимо того, что это безопасно, это еще и универсальный стандарт и гарантия быстрого подключения системы к AdHands. Отсутствие единого универсального протокола обмена данными - еще одна проблема.

Если бы он существовал, AdHands просто пересылал бы системные данные в единую панель управления.

Однако если такой протокол будет создан, на рынке появится множество компаний, готовых строить бизнес на инновациях, как это обычно бывает. А это может привести к непродуманным решениям, ставящим под угрозу серьезные системы в глазах конечного пользователя.

Кроме того, создание единого протокола не очень выгодно крупным сайтам, которые не готовы и не собираются отказываться от своих графических интерфейсов.

Другая проблема, на которую мы мало можем повлиять, — это Ограничения API — ограниченное количество запросов в день, которое задается рекламными системами.

Каждый метод API имеет свой лимит вызовов, который определяется ресурсоёмкостью и «тяжестью» метода.

В принципе, у Google AdWords и Яндекс.

Директ настолько большое количество запросов, что сложно почувствовать ограничение, но есть и проблемные сервисы, например Яндекс.

Маркет, использование методов которого иногда напоминает попытку получить талон к нужному врачу.

Платформы часто идут навстречу и расширяют границы, но при этом уделяется внимание и структуре самих систем-агрегаторов, которые могут не оптимально использовать запросы.

Конечно, это не полный список проблем и мелких препятствий, с которыми разработчикам AdHands приходится сталкиваться каждый день.

Мы всегда ищем компромиссы и не боимся использовать в своем коде решения, которые кому-то могут показаться не очень элегантными.

Это связано с большим количеством подключаемых систем и разнообразием их GUI и API. Пишем парсеры для систем без API, создаем ненужные сущности, вводим куски кода с проверками и реализуем новый функционал, не включенный в AdHands. Все эти решения могут повлиять на управляемость и простоту администрирования системы, а также на ее производительность.

Но при этом мы постоянно оптимизируем код, адаптируемся к системе лимитов и делаем все для удобства наших пользователей.

В последнее время наблюдается тенденция к унификации API крупных платформ.

Например, прототип API Яндекс.

Метрики в части отчетности Core копирует API Google Analytics. Надеемся, что другие API-провайдеры не будут жить своей жизнью, а присмотрятся к лучшим практикам и последуют не модному, но очень полезному тренду.

И совместными усилиями мы сделаем лучше для тех, ради кого все затевалось – для конечных пользователей, рекламных агентств и рекламодателей.

Большинство из них не знают об API и его проблемах; им нужно быстро, удобно и понятно.

Наша задача – обеспечить это.

Теги: #api #AdHands #api

Вместе с данным постом часто просматривают: