3. Облака в API - сумма больше слагаемых
• Отдельно стоящий SaaS великолепен, но держится
на ручной работе
• Умение делиться данными - много интеграций
• Каждая интеграция - новые клиенты
4. • Организация рабочего места
кассира
• Подключение разных интернет
магазинов
Облачная учётная система
Оптовые продажи
Несколько сайтов
Региональные офисы
Розничные точки
• Подготовка первичной документации
• Выгрузка в бухгалтерию
• Облачная инфраструктура Учетная
система
7. МойСклад предоставляет API
• Данные
– CSV
– XML API
– STOCK API
– REST API
– JSON API
– ATOMS (“Свой магазин” Атол)
– POS API (расширение JSON API для POS)
• Управление
– Tenant API (Parallels APS)
– Регистрация
8. 2008 - экспорт всех данных
• Для уверенности пользователей
• Реализация с минимальными затратами -
JAXB
• Ручной экспорт из интерфейса
9. 2008 - XML API
• На основе экспорта данных
• Загрузка multipart
• Все данные - одним контейнером
• Импорт отгрузок и заказов
• Паровоз - проект с РусАгро
10. 2010 - REST API
• Схема практически идентична XML API
• Контейнера нет
• Паровоз - проект с БухСОФТ
• Nouns - /entity/{entityName}/{id}
• Репликация по updated
11. 2010 - STOCK API
• REST + SOAP
• Расчёт остатков - главная ценность
• Самый большой объем данных
12. Ошибка №1
JAXB разметка сделана непосредственно на JPA
Entity
• Невозможно поддерживать версии
• Совместимость как груз
• API меняется скачком
13. Ошибка №2
Универсальная фильтрация привела к
использованию в качестве backend
• Непрогнозируемая нагрузка
• Реализация не соответствует
• Состав предоставляемой услуги не
соответствует тарифу
14. Ошибка №3
Схема и документация путём reverse engineer
• Затрудняет тестирование
• Размывает реализацию
15. Ошибка №4
Нет инфраструктуры для управления подключенными
приложениями
• Невнятный отклик от разработчиков
• Нет возможности управлять доступом
• Отсутствие гибкости в тарифной политике
16. 2015 - JSON API 1.0
• HATEOAS
• Версионирование
• Схема как контракт
• Документация
• Поддержка больших документов
• Репликация
• Лимиты по нагрузке
17. 2017 - JSON API 2.0
• OAuth
• Регистрация приложений и разработчиков
• Идентификация объектов по каталогу клиента
• Идентификация объектов по именам и иным не
уникальным полям
18. Какие задачи решают с [REST|JSON] API
• Репликация данных между ИМ или внутренними
учётными системами
• Получение расчётных даных
• Использование в качестве backend
• Бот в Telegram - таскает остатки!
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. Статистика REST API
• Компаний 400
• Пользователей 600
• Запросов в секунду 25
• Трафик в сутки 200 Гб
21. Статистика JSON API
• Компаний 900
• Пользователей 1000
• Запросов в секунду 7
• Трафик в сутки 5 Гб
22. Статистика в целом
• Компаний 6000
• Пользователей 10000
• Запросов в секунду 750
• Трафик в сутки 300 Гб
23. Зачем делать API?
• Понимание своего value на рынке
• Экосистема притягивает новых клиентов
• Это интересно!
24. Место API в продукте
• Самостоятельный продукт
• Продвижение продукта
• Проекция продукта
25. Какие вопросы нужно себе задавать?
• Для кого будет построен?
• Какую задачу решать с его помощью?
• Как зарабатывать на API?
26. Что мешает клиенту начать работать с API
• Сложная и/или противоречивая схема данных
• Идентификация элементов данных
• Формат обмена и URL ресурсов
• Несоответствие запросам клиентов
• Отсутствие документации
27. Что приводит к отказу клиента от API
• Перебои в работе
• Частые изменения в схеме
• Отсутствие версионирования
• Отсутствие документации
• Сложная структура
• Запутанные связи
28. Что необходимо для эксплуатации API?
• Клиенты!
• Следить за нагрузкой
•Определить лимиты и
контролировать их
• Отслеживать
востребованность
29. Лимиты навсегда
• Запросов в единицу времени
• Объектов в запросе
• Байт в запросе
• Одновременных запросов
30. Зачем нужны лимиты?
• Управление нагрузкой
•Соответствие тарифам
•Заработок или подарок?
Скачок нагрузки
Активация лимитов
31. Идентификация
• Внутренние идентификаторы
• Идентификаторы клиентского
приложения
• Идентификация по имени или
иному не уникальному коду
API
Клиент
Импорт с id клиента, в
ответ - id хранилища
Репликация по id хранилища требует его
сохранения на стороне клиента.
32. OAuth и доступ приложений к API
• Регистрация приложении и разработчиков
• Гибкая тарифная политика
• Управление нагрузкой