SocialKey Ads
• Централизуем управление таргетированной рекламой в разных соцсетях;
• предоставляем собственные сегменты, собранные аналитикой BigData;
• работаем с MyTarget как агентство;• тысячи новых активных баннеров в месяц.
Инструменты курильщика
• Примитивные примеры по работе с API из документации;
• небольшие библиотеки, не отвечающие требованиям сертификации;
• самописная логика на голом curl.
Что хотелось получить
• Полноценную объектную модель:– ресурсов с вложенной структурой зависимостей;– логики работы с API;
• авторизацию «из коробки»:– 4 способа авторизации;– sudo is deprecated;– правильный подход – получение клиентских
токенов;– но есть нюансы: лимиты на получение и обновление
токенов.
Что хотелось получить
• Удобную работу с лимитами API:– разные лимиты для разных клиентов;– throttling.json vs HTTP-headers.
• обработку ошибок:– 4хх в виде понятных и информативных
исключений.
Что хотелось получить
• Учет «особенностей»:– восприятие html-ответа как “нормального”
сообщения об ошибке;– 429 код – не обязательно говорит о превышении
лимита;– две версии API;
• работа с пакетными запросами;• логирование;• расширяемость, универсальность.
Архитектура SDK
• Основной действующий слой – операторы;• оператор использует:– клиент для работы с HTTP• запросы, парсинг ответа;• валидация ответа;
– маппер для преобразования json в объекты доменной модели;
Архитектура SDK
• Middleware-stack– каждый middleware получает запрос и передаёт
его следующему middleware по стеку;– внизу стека находится TerminatingMiddleware,
который совершает реальный запрос и передаёт ответ на выход;
– ответ также передается обратно по стеку;– порядок играет роль.
Ехал middleware через middleware
• Логирование;• контроль лимитов, DoctrineCache для
хранения где угодно;• проверка валидности ответа;• получение и обновление токенов.
Архитектура SDK
• Mapper преобразует json в объекты:– Правила мапинга конфигурируются для
каждого объекта аннотациями;– если какой-то информации не хватает – пишем
null;
Интеграция. Symfony Bundle.
• Несколько клиентов;• кеш токенов в redis;• возможность перегрузить client или http-
transport;• лёгкое подключение middleware.
Интеграция. SocialKeyAds.• Используем бандл;• асинхронно и многопоточно обрабатываем задания на
выгрузку:– Rabbitmq;– Event-band;
• «отложенные очереди» для повторов при ошибках;• для лимитов интервал повтора вычисляется в момент ошибки;• для ошибок сети со временем интервал повторов
увеличивается;• «мертвая очередь» для постоянных ошибок и терминальных
ошибок;• микросервис токенов.
Что хочется доделать
• Push-уведомления?• расширенная поддержка 2-й
версии:ремаркетинг;– загрузка html5-баннеров;– projection.json;– быстрая статистика и статистика по конверсиям;
• поддержка недокументированных ресурсов в виде отдельной библиотеки.
Спасибо за внимание
Лицензия Apache 2.0
https://github.com/Digsolab/mytarget-php-ads-sdk
https://github.com/Digsolab/MyTargetClientBundle