Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SECON'2016. Алексеев Олег, Живой API

348 views

Published on

Опыт и история построения API для сервиса МойСклад.

Published in: Technology
  • Login to see the comments

  • Be the first to like this

SECON'2016. Алексеев Олег, Живой API

  1. 1. Живой API Олег Алексеев МойСклад (Москва)
  2. 2. ЖИВОЙ API Олег Алексеев МойСклад
  3. 3. Облака в API - сумма больше слагаемых • Отдельно стоящий SaaS великолепен, но держится на ручной работе • Умение делиться данными - много интеграций • Каждая интеграция - новые клиенты
  4. 4. • Организация рабочего места кассира • Подключение разных интернет магазинов Облачная учётная система Оптовые продажи Несколько сайтов Региональные офисы Розничные точки • Подготовка первичной документации • Выгрузка в бухгалтерию • Облачная инфраструктура Учетная система
  5. 5. Учетная система Обмен данными с интернет-магазином заказы товары остатк и
  6. 6. •данные - 1С, 1С Enterprise Data, YML •интернет-магазины - CommerceML, Ecwid •внутренние задачи - RoiStat, Битрикс 24, Geobase •рассылки - UniSender, Sendsay •телефония - VoxImplant, Простые звонки •экранные подсказки - DaDATA •банки - Альфа-Банк, Банк Точка, Модульбанк, Тинькофф •оплата - Яндекс.Деньги, QIWI, Assist, Робокасса МойСклад использует API
  7. 7. МойСклад предоставляет API • Данные – CSV – XML API – STOCK API – REST API – JSON API – ATOMS (“Свой магазин” Атол) – POS API (расширение JSON API для POS) • Управление – Tenant API (Parallels APS) – Регистрация
  8. 8. 2008 - экспорт всех данных • Для уверенности пользователей • Реализация с минимальными затратами - JAXB • Ручной экспорт из интерфейса
  9. 9. 2008 - XML API • На основе экспорта данных • Загрузка multipart • Все данные - одним контейнером • Импорт отгрузок и заказов • Паровоз - проект с РусАгро
  10. 10. 2010 - REST API • Схема практически идентична XML API • Контейнера нет • Паровоз - проект с БухСОФТ • Nouns - /entity/{entityName}/{id} • Репликация по updated
  11. 11. 2010 - STOCK API • REST + SOAP • Расчёт остатков - главная ценность • Самый большой объем данных
  12. 12. Ошибка №1 JAXB разметка сделана непосредственно на JPA Entity • Невозможно поддерживать версии • Совместимость как груз • API меняется скачком
  13. 13. Ошибка №2 Универсальная фильтрация привела к использованию в качестве backend • Непрогнозируемая нагрузка • Реализация не соответствует • Состав предоставляемой услуги не соответствует тарифу
  14. 14. Ошибка №3 Схема и документация путём reverse engineer • Затрудняет тестирование • Размывает реализацию
  15. 15. Ошибка №4 Нет инфраструктуры для управления подключенными приложениями • Невнятный отклик от разработчиков • Нет возможности управлять доступом • Отсутствие гибкости в тарифной политике
  16. 16. 2015 - JSON API 1.0 • HATEOAS • Версионирование • Схема как контракт • Документация • Поддержка больших документов • Репликация • Лимиты по нагрузке
  17. 17. 2017 - JSON API 2.0 • OAuth • Регистрация приложений и разработчиков • Идентификация объектов по каталогу клиента • Идентификация объектов по именам и иным не уникальным полям
  18. 18. Какие задачи решают с [REST|JSON] API • Репликация данных между ИМ или внутренними учётными системами • Получение расчётных даных • Использование в качестве backend • Бот в Telegram - таскает остатки!
  19. 19. Бот в Telegram за 4 часа https://bitbucket.org/moysklad/com.lognex.telegram.moysklad.stock Python 2.7 Google App Engine Google Cloud Datastore { "meta": { "type": "product", "mediaType": "application/json" }, "stock": 6, "inTransit": 0, "reserve": 0, "quantity": 6, "name": "00003", "code": "00003", "price": 20000, "salePrice": 10000, "uom": "шт." }
  20. 20. Статистика REST API • Компаний 400 • Пользователей 600 • Запросов в секунду 25 • Трафик в сутки 200 Гб
  21. 21. Статистика JSON API • Компаний 900 • Пользователей 1000 • Запросов в секунду 7 • Трафик в сутки 5 Гб
  22. 22. Статистика в целом • Компаний 6000 • Пользователей 10000 • Запросов в секунду 750 • Трафик в сутки 300 Гб
  23. 23. Зачем делать API? • Понимание своего value на рынке • Экосистема притягивает новых клиентов • Это интересно!
  24. 24. Место API в продукте • Самостоятельный продукт • Продвижение продукта • Проекция продукта
  25. 25. Какие вопросы нужно себе задавать? • Для кого будет построен? • Какую задачу решать с его помощью? • Как зарабатывать на API?
  26. 26. Что мешает клиенту начать работать с API • Сложная и/или противоречивая схема данных • Идентификация элементов данных • Формат обмена и URL ресурсов • Несоответствие запросам клиентов • Отсутствие документации
  27. 27. Что приводит к отказу клиента от API • Перебои в работе • Частые изменения в схеме • Отсутствие версионирования • Отсутствие документации • Сложная структура • Запутанные связи
  28. 28. Что необходимо для эксплуатации API? • Клиенты! • Следить за нагрузкой •Определить лимиты и контролировать их • Отслеживать востребованность
  29. 29. Лимиты навсегда • Запросов в единицу времени • Объектов в запросе • Байт в запросе • Одновременных запросов
  30. 30. Зачем нужны лимиты? • Управление нагрузкой •Соответствие тарифам •Заработок или подарок? Скачок нагрузки Активация лимитов
  31. 31. Идентификация • Внутренние идентификаторы • Идентификаторы клиентского приложения • Идентификация по имени или иному не уникальному коду API Клиент Импорт с id клиента, в ответ - id хранилища Репликация по id хранилища требует его сохранения на стороне клиента.
  32. 32. OAuth и доступ приложений к API • Регистрация приложении и разработчиков • Гибкая тарифная политика • Управление нагрузкой
  33. 33. Что такое МойСклад? МойСклад – облачный сервис управления торговлей
  34. 34. О нас • Первый в России облачный сервис управления торговлей • На рынке с начала 2008 года • Более 500 000 пользователей
  35. 35. Регистрируйтесь, пишите, звоните www.moysklad.ru 8 (800) 250-04-32
  36. 36. СПАСИБО!
  37. 37. Тарифы

×