SlideShare a Scribd company logo
Сергей Коржнев
РАЗРАБОТКА
РАЗВЕСИСТОГО API
Крайний за архитектуру
справочного API 2ГИС
Справочное API 2ГИС
http://catalog.api.2gis.ru/search
?what=музей
&where=Москва
&version=1.3
&key=1234567890
&output=json
API 2ГИС в цифрах
уников в месяц
online
более 500 проектов
>10 000 000
Эффективная и полезная
монетизация API
Р
Большой API
Сложное внутреннее
устройство
Более 50методов
Технологический стек
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
Аспекты
ДокументацияАвтотестыАрхитектура
Архитектура
— F(t)
— Сначала простая
— Потом чуть посложнее
Прототип
— Требования
— Реализация
Маленькое API
— Просто
— Быстро
— Стандартная архитектура
Стандартный подход
не работает
Борьба со сложностью
Слоистая архитектура
The Seven Layers of OSI
Physical Link
User
Transmit
Data
Receive
Data
Application Layer
Physical Layer
Data Link Layer
Network Layer
Transport Layer
Session Layer
Presentation Layer
Application Layer
MVC
Model
ControllerView
Компоненты архитектурыКомпоненты архитектуры
Модель: Бизнес-логика и ActiveRecord
Представление
Контроллер
Объект запроса
Валидатор запроса
Модель
ActiveRecord
Бизнес-логика
Controller
Бизнес-логика
Yii-расширения
Класс CApplicationComponent
Yii::app()->geoCoder
Конфигурация
return array(
'components' => array(
'geoCoder' => array(
'class' => 'ext.geoCoder.ExtGeoCoder',
'country' => 'Russia'
),
...
),
);
ActiveRecord
Chuck Norris approved
Представление
Рендеринг в файлах
Рендеринг в классе
Контроллер – Представление
JSON, XML
Объект запроса
Грязный контроллер
Чистый контроллер
Объект запроса
GeoSearchRequest extends RequestModel {
public $what;
public $is_cool_place;
public function rules() {
return array(
array('WhatValidator', 'min' => 2, 'max' => 50),
array('BooleanValidator',
'param' => 'is_cool_place',
'required' => false),
);
}
}
Валидатор объекта запроса
class WhatValidator extends Validator {
public function run(RequestModel $model) {
// ...
}
}
Объект запроса
Нет состояния
Декларативный подход
Наглядность
Структура директорий
/protected
/controllers
GeoController.php
/views
GeoView.php
/requests
/geo
GeoSearchRequest.php
/extensions
/geo
ExtGeo.php
/models
/components
Модель: Бизнес-логика и ActiveRecord
Представление
Контроллер
Объект запроса
Валидатор запроса
ВыводыКомпоненты архитектуры
Модель: Бизнес-логика и ActiveRecord
Представление
Контроллер
Объект запроса
Валидатор запроса
Автотесты
Гибридные тесты
Зависимости
Подмена данных
JSON Schema
Структура
Обязательность
Тип данных
XML Schema
PHP-реализация
Сам формат
http://json-schema.org/
PHP-библиотека от института Беркли
https://github.com/justinrainbow/json-schema
JSON
{ "a":10, "b":"boo" }
JSON Schema для него
{ "a":10, "b":"boo" }
{
"a": {
"type": "number",
"required": true
},
"b": {
"type": "string",
"required": true
}
}
Использование JSON Schema
Фильтр ответа
Тестируем в фоне
Включаем во время тестов
"additionalProperties": false
Приоритеты тестов
Публичный интерфейс
JSON Schema
Дешево
Часто используется
Бизнес-логика
Документация
— Ветка на фичу
— Вместе с кодом
— Актуальность
— Да ну её нафиг!
Тема: Бульдог + Носорог
"reviews_count": {
"type": "number",
"required": true,
"meta": {
"description": "Количество отзывов"
}
},
JSON Schema + документация
Дешевая документация
Автоматический рендеринг
Тесты на документацию
Итоги
Большой API
Архитектура
Автотесты
Документация
Спасибо. Вопросы?
s.korzhnev@2gis.ruСергей Коржнев

More Related Content

PDF
Разработка развесистого API на Yii фреймворке. Коржнев
2ГИС Технологии
 
PDF
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
2ГИС Технологии
 
PDF
«Карта в браузере: путь от спутникового снимка до пользователя» – Илья Тарату...
2ГИС Технологии
 
PDF
DUMP-2013 Serverside - Внутренняя кухня JIT компилятора - Старовойт Андрей
it-people
 
PDF
DUMP-2013 Serverside - Система сборки и отображении статистики Graphite - Хал...
it-people
 
ODP
DUMP-2013 Serverside - Когда же мы сможем нормально "звонить браузером"? - Па...
it-people
 
PPTX
DUMP-2013 Serverside - О хранилище “Зебра” - Казаков Александр
it-people
 
PDF
DUMP-2013 Serverside - Управление кластером серверов с помощью Pacemaker - Фр...
it-people
 
Разработка развесистого API на Yii фреймворке. Коржнев
2ГИС Технологии
 
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
2ГИС Технологии
 
«Карта в браузере: путь от спутникового снимка до пользователя» – Илья Тарату...
2ГИС Технологии
 
DUMP-2013 Serverside - Внутренняя кухня JIT компилятора - Старовойт Андрей
it-people
 
DUMP-2013 Serverside - Система сборки и отображении статистики Graphite - Хал...
it-people
 
DUMP-2013 Serverside - Когда же мы сможем нормально "звонить браузером"? - Па...
it-people
 
DUMP-2013 Serverside - О хранилище “Зебра” - Казаков Александр
it-people
 
DUMP-2013 Serverside - Управление кластером серверов с помощью Pacemaker - Фр...
it-people
 

Viewers also liked (20)

PDF
DUMP-2013 Serverside - Типичные ошибки проектирования API - Кирпичников Алексей
it-people
 
PPT
DUMP-2013 Serverside - Система управления денормализованными данными компании...
it-people
 
PDF
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
2ГИС Технологии
 
ODP
Article25
Harry Wood
 
PDF
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
2ГИС Технологии
 
PDF
«Велогосипед», Данил Ильиных
DevDay
 
PDF
«Открытая веб картография», Илья Таратухин
DevDay
 
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
PDF
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
 
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
PDF
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
PPTX
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
2ГИС Технологии
 
PDF
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
PDF
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
2ГИС Технологии
 
PDF
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
2ГИС Технологии
 
PDF
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
PDF
Cергей Коржнев, 2ГИС
Ontico
 
PPTX
«Девиации и патологии в отношениях с руководителями и подчинёнными» — Степан ...
2ГИС Технологии
 
PDF
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
PDF
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
 
DUMP-2013 Serverside - Типичные ошибки проектирования API - Кирпичников Алексей
it-people
 
DUMP-2013 Serverside - Система управления денормализованными данными компании...
it-people
 
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
2ГИС Технологии
 
Article25
Harry Wood
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
2ГИС Технологии
 
«Велогосипед», Данил Ильиных
DevDay
 
«Открытая веб картография», Илья Таратухин
DevDay
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
2ГИС Технологии
 
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
2ГИС Технологии
 
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
2ГИС Технологии
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Cергей Коржнев, 2ГИС
Ontico
 
«Девиации и патологии в отношениях с руководителями и подчинёнными» — Степан ...
2ГИС Технологии
 
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
 
Ad

Similar to DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей (20)

PPTX
Enterprise Symfony Architecture (RU)
Alexander Lisachenko
 
PDF
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia
 
PDF
2013 09 17 архитектура веб-приложений
Yandex
 
PDF
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Symfoniacs
 
PDF
Enterprise symfony architecture
ru_jeka
 
PDF
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
Anatoly Simkin
 
PDF
Symfony в архитектуре Upwork Enterprise
Dmitry Semenov
 
PPTX
Андрей Завадский "Бессерверная архитектура"
Fwdays
 
PDF
Обзор Unified Contact Center Enterprise
Cisco Russia
 
PDF
Программируемость корпоративной сети с Cisco APIC-EM
Cisco Russia
 
PPTX
Микросервисы в .NET Core
Andrew Gubskiy
 
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
PDF
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
it-people
 
ODP
Middleware
megakott
 
PDF
Принципы и подходы Cisco для автоматизации в сетях операторов связи
Cisco Russia
 
PPTX
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
it-people
 
PPTX
DevOps для 1С
Alexey Lustin
 
PPTX
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
Ontico
 
PPTX
Software People 2010
Sergey Orlik
 
PDF
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Yulia Tsisyk
 
Enterprise Symfony Architecture (RU)
Alexander Lisachenko
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia
 
2013 09 17 архитектура веб-приложений
Yandex
 
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Symfoniacs
 
Enterprise symfony architecture
ru_jeka
 
Доклад и реферат по теме системной инженерии "Управление архитектурой при про...
Anatoly Simkin
 
Symfony в архитектуре Upwork Enterprise
Dmitry Semenov
 
Андрей Завадский "Бессерверная архитектура"
Fwdays
 
Обзор Unified Contact Center Enterprise
Cisco Russia
 
Программируемость корпоративной сети с Cisco APIC-EM
Cisco Russia
 
Микросервисы в .NET Core
Andrew Gubskiy
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
it-people
 
Middleware
megakott
 
Принципы и подходы Cisco для автоматизации в сетях операторов связи
Cisco Russia
 
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
it-people
 
DevOps для 1С
Alexey Lustin
 
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
Ontico
 
Software People 2010
Sergey Orlik
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Yulia Tsisyk
 
Ad

More from it-people (20)

PDF
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
it-people
 
PDF
«Scrapy internals» Александр Сибиряков, Scrapinghub
it-people
 
PDF
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
it-people
 
PDF
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
it-people
 
PDF
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
it-people
 
PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
it-people
 
PDF
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
it-people
 
PDF
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
it-people
 
PDF
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
it-people
 
PDF
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
it-people
 
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 
PDF
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
it-people
 
PDF
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
it-people
 
PDF
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
it-people
 
PDF
«(Без)опасный Python», Иван Цыганов, Positive Technologies
it-people
 
PDF
«Python of Things», Кирилл Борисов, Яндекс
it-people
 
PDF
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
it-people
 
PDF
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
it-people
 
PDF
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
it-people
 
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
it-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
it-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
it-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
it-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
it-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
it-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
it-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
it-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
it-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
it-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
it-people
 
«Python of Things», Кирилл Борисов, Яндекс
it-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
it-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
it-people
 

DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей