SlideShare a Scribd company logo
1 of 20
Василь Кулаков / 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

More Related Content

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

Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...
CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...
CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...CodeFest
 
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...GeeksLab Odessa
 
Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургКирилл Толкачёв
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
Модульная структура
Модульная структураМодульная структура
Модульная структураDenis Tsvettsih
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Ontico
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
Основные тренды облачного рынка
Основные тренды облачного рынкаОсновные тренды облачного рынка
Основные тренды облачного рынкаКРОК
 
Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...Cisco Russia
 
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Ontico
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
Решения Brocade для построения IP сетей будущего
Решения Brocade для построения IP сетей будущегоРешения Brocade для построения IP сетей будущего
Решения Brocade для построения IP сетей будущегоARCCN
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya Pus
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтAlexander Mazurov
 

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

Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...
CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...
CodeFest 2013. Биллевич В. — SDK мобильного сервиса. Добавление новой функцио...
 
Highload 2011-demona
Highload 2011-demonaHighload 2011-demona
Highload 2011-demona
 
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
 
Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG Екатеринбург
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
Middleware
MiddlewareMiddleware
Middleware
 
Основные тренды облачного рынка
Основные тренды облачного рынкаОсновные тренды облачного рынка
Основные тренды облачного рынка
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...Практические примеры использования API в инфраструктурных продуктах Cisco для...
Практические примеры использования API в инфраструктурных продуктах Cisco для...
 
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Решения Brocade для построения IP сетей будущего
Решения Brocade для построения IP сетей будущегоРешения Brocade для построения IP сетей будущего
Решения Brocade для построения IP сетей будущего
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайт
 

More from Егор Тютюников

Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)
Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)
Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)Егор Тютюников
 
Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...
Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...
Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...Егор Тютюников
 
Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...
Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...
Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...Егор Тютюников
 
Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...
Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...
Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...Егор Тютюников
 
Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)
Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)
Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)Егор Тютюников
 
Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)
Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)
Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)Егор Тютюников
 

More from Егор Тютюников (6)

Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)
Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)
Обзорный доклад по API myTarget 2016 (август). Егор Тютюников (myTarget)
 
Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...
Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...
Telegram бот для myTarget: проблемы и решения при создании. Николай Сыч (Targ...
 
Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...
Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...
Уменьшение количества запросов в API с помощью настройки PUSH-уведомлений. Дм...
 
Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...
Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...
Жадные алгоритмы оптимизации для определения эффективности объявлений. Алекса...
 
Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)
Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)
Api myTarget: секреты быстрой адаптации. Алексей Фельде (SocialKey)
 
Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)
Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)
Способы работы со статистикой в API myTarget. Александр Покатилов (myTarget)
 

Разработка и внедрение 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 в объекты доменной модели;
  • 10. Архитектура SDK • Middleware-stack – каждый middleware получает запрос и передаёт его следующему middleware по стеку; – внизу стека находится TerminatingMiddleware, который совершает реальный запрос и передаёт ответ на выход; – ответ также передается обратно по стеку; – порядок играет роль.
  • 11. Ехал middleware через middleware • Логирование; • контроль лимитов, DoctrineCache для хранения где угодно; • проверка валидности ответа; • получение и обновление токенов.
  • 14. Архитектура SDK • Mapper преобразует json в объекты: – Правила мапинга конфигурируются для каждого объекта аннотациями; – если какой-то информации не хватает – пишем null;
  • 16. Интеграция. Symfony Bundle. • Несколько клиентов; • кеш токенов в redis; • возможность перегрузить client или http- transport; • лёгкое подключение middleware.
  • 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