Василь Кулаков / SocialKey Ads
РАЗРАБОТКА И ВНЕДРЕНИЕ
PHP SDK myTarget
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
Архитектура SDK
Архитектура SDK
• Middleware-stack
– каждый middleware получает запрос и передаёт
его следующему middleware по стеку;
– внизу стека находится TerminatingMiddleware,
который совершает реальный запрос и
передаёт ответ на выход;
– ответ также передается обратно по стеку;
– порядок играет роль.
Ехал middleware через middleware
• Логирование;
• контроль лимитов, DoctrineCache для
хранения где угодно;
• проверка валидности ответа;
• получение и обновление токенов.
Порядок имеет значение
Middleware для логирования
Архитектура SDK
• Mapper преобразует json в объекты:
– Правила мапинга конфигурируются для
каждого объекта аннотациями;
– если какой-то информации не хватает – пишем
null;
Архитектура SDK
Интеграция. Symfony Bundle.
• Несколько клиентов;
• кеш токенов в redis;
• возможность перегрузить client или http-
transport;
• лёгкое подключение middleware.
Интеграция. Symfony Bundle.
Интеграция. 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
vasil@digsolab.com

Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)

  • 1.
    Василь Кулаков /SocialKey Ads РАЗРАБОТКА И ВНЕДРЕНИЕ PHP SDK myTarget
  • 2.
    SocialKey Ads • Централизуемуправление таргетированной рекламой в разных соцсетях; • предоставляем собственные сегменты, собранные аналитикой BigData; • работаем с MyTarget как агентство; • тысячи новых активных баннеров в месяц.
  • 3.
    Инструменты курильщика • Примитивныепримеры по работе с API из документации; • небольшие библиотеки, не отвечающие требованиям сертификации; • самописная логика на голом curl.
  • 4.
    Что хотелось получить •Полноценную объектную модель: – ресурсов с вложенной структурой зависимостей; – логики работы с API; • авторизацию «из коробки»: – 4 способа авторизации; – sudo is deprecated; – правильный подход – получение клиентских токенов; – но есть нюансы: лимиты на получение и обновление токенов.
  • 5.
    Что хотелось получить •Удобную работу с лимитами API: – разные лимиты для разных клиентов; – throttling.json vs HTTP-headers. • обработку ошибок: – 4хх в виде понятных и информативных исключений.
  • 6.
    Что хотелось получить •Учет «особенностей»: – восприятие html-ответа как “нормального” сообщения об ошибке; – 429 код – не обязательно говорит о превышении лимита; – две версии API; • работа с пакетными запросами; • логирование; • расширяемость, универсальность.
  • 7.
    Архитектура SDK • Основнойдействующий слой – операторы; • оператор использует: – клиент для работы с HTTP • запросы, парсинг ответа; • валидация ответа; – маппер для преобразования json в объекты доменной модели;
  • 8.
  • 9.
  • 10.
    Архитектура SDK • Middleware-stack –каждый middleware получает запрос и передаёт его следующему middleware по стеку; – внизу стека находится TerminatingMiddleware, который совершает реальный запрос и передаёт ответ на выход; – ответ также передается обратно по стеку; – порядок играет роль.
  • 11.
    Ехал middleware черезmiddleware • Логирование; • контроль лимитов, DoctrineCache для хранения где угодно; • проверка валидности ответа; • получение и обновление токенов.
  • 12.
  • 13.
  • 14.
    Архитектура SDK • Mapperпреобразует json в объекты: – Правила мапинга конфигурируются для каждого объекта аннотациями; – если какой-то информации не хватает – пишем null;
  • 15.
  • 16.
    Интеграция. Symfony Bundle. •Несколько клиентов; • кеш токенов в redis; • возможность перегрузить client или http- transport; • лёгкое подключение middleware.
  • 17.
  • 18.
    Интеграция. SocialKeyAds. • Используембандл; • асинхронно и многопоточно обрабатываем задания на выгрузку: – Rabbitmq; – Event-band; • «отложенные очереди» для повторов при ошибках; • для лимитов интервал повтора вычисляется в момент ошибки; • для ошибок сети со временем интервал повторов увеличивается; • «мертвая очередь» для постоянных ошибок и терминальных ошибок; • микросервис токенов.
  • 19.
    Что хочется доделать •Push-уведомления? • расширенная поддержка 2-й версии:ремаркетинг; – загрузка html5-баннеров; – projection.json; – быстрая статистика и статистика по конверсиям; • поддержка недокументированных ресурсов в виде отдельной библиотеки.
  • 20.
    Спасибо за внимание ЛицензияApache 2.0 https://github.com/Digsolab/mytarget-php-ads-sdk https://github.com/Digsolab/MyTargetClientBundle vasil@digsolab.com