SlideShare a Scribd company logo
Разработка развесистого API
на Yii фреймворке
Сергей Коржнев
Крайний за архитектуру
справочного API 2ГИС
2009 год
>50фреймворков
Технологический стек
Справочное 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
Сложное внутреннее
устройство
Более 50методов
Аспекты
ДокументацияАвтотестыАрхитектура
Маленькое API
— Просто
— Быстро
— Стандартный подход
По мере роста
Разработка
По мере роста
Разработка Баги
По мере роста
Разработка СложностьБаги
Решение
Слоистая архитектура
Application Layer
Physical Layer
Data Link Layer
Network Layer
Transport Layer
Session Layer
Presentation Layer
Application Layer
MVC
Model
ControllerView
Модель
ActiveRecord
Бизнес-логика
Controller
Бизнес-логика
Yii-расширения
CApplicationComponent
Конфигурация
return [
'components' => [
'geoCoder' => [
'class' => 'ext.geoCoder.ExtGeoCoder',
'country' => 'Russia'
],
//...
],
];
ActiveRecord
Представление
Model
ControllerView
Плохо
Классический рендеринг в файлах
Плохо
$this->render('file3', $data);
$this->render('file2', $data);
$this->render('file1', $data);
file2
file1
Контроллер
Плохо
Контроллер
Рендеринг
Непосредственные
обязанности
Хорошо
11
Класс
контроллера
Класс
представления
Контроллер
Model
ControllerView
Валидация и фильтрация
/geo/search?what=кафе'; DROP TABLE users;
SELECT * FROM users WHERE 'x' = 'x
Фильтры контроллера
Лучше, чем ничего
Но можно лучше
Запрос
/geo/search?what=кафе
Инкапсуляция запроса
class GeoSearchRequest extends RequestModel {
public $what;
}
Объект запроса
class GeoSearchRequest extends RequestModel {
public $what;
public function rules() {
return [
['WhatValidator',
'min' => 2,
'max' => 50,
'required' => true
]
];
}
}
Валидатор
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
Контроллер
Представление
Объект запроса
Валидатор запроса
Автотесты
Unit тесты
Правильно
Дорого
Гибридные тесты
Гибридные тесты
Данные
Гибридные тесты
Усилия Профит
Формат ответа API
Структура
Обязательность
Тип данных
Все уже придумано до нас
XML Schema
JSON Schema
JSON Schema & PHP
Формат
http://json-schema.org/
Библиотека от института Беркли
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)
Ещё дёгтя
Формат не устаканился
Библиотеки сырые
Решение
Подозрительная
библиотека
Unit тесты
Приоритеты тестов
Публичный интерфейс
JSON Schema
Дешево
Часто используется
Бизнес-логика
Документация
Документация
— Ветка на фичу
Документация
— Ветка на фичу
— Актуальность
Документация
— Ветка на фичу
— Актуальность
— Вместе с кодом
Документация
— Да ну её нафиг!
Бульдог + Носорог
"reviews_count": {
"type": "number",
"required": true,
"meta": {
"description": "Количество отзывов"
}
},
JSON Schema + документация
Дешево
Рендеринг
Тесты
Итоги
Специфика большого API
Слоистая архитектура
Автотесты
Документация + JSON Schema
Спасибо. Вопросы?
s.korzhnev@2gis.ruСергей Коржнев

More Related Content

Similar to Разработка развесистого API на Yii фреймворке. Коржнев

Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
IIS7 possibilities
IIS7 possibilitiesIIS7 possibilities
IIS7 possibilities
Транслируем.бел
 
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...it-people
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
Tatiana Aulachynskaya
 
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
it-people
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
Andrew Gubskiy
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
GoSharp
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsAndrew Mayorov
 
Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"
IT Event
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
MskDotNet Community
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON
 
Bachelors Diploma Slides Short Version
Bachelors Diploma Slides Short VersionBachelors Diploma Slides Short Version
Bachelors Diploma Slides Short Version
Denis Zakharov
 
Alexandr Makarov - PHP framework Yii
Alexandr Makarov - PHP framework YiiAlexandr Makarov - PHP framework Yii
Alexandr Makarov - PHP framework YiiArvids Godjuks
 
Yii PHP framework: basics, techniques and some inside info
Yii PHP framework: basics, techniques and some inside infoYii PHP framework: basics, techniques and some inside info
Yii PHP framework: basics, techniques and some inside info
seleckis
 
алексей диплом презентация
алексей диплом презентацияалексей диплом презентация
алексей диплом презентация
Алексей Городецкий
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
Fwdays
 

Similar to Разработка развесистого API на Yii фреймворке. Коржнев (20)

Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Yii rit 2010
Yii rit 2010Yii rit 2010
Yii rit 2010
 
IIS7 possibilities
IIS7 possibilitiesIIS7 possibilities
IIS7 possibilities
 
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
DUMP-2012 - Мобильные технологии - "Как мы выстраиваем разработку сервиса под...
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
 
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
"Архитектура модели в Сбербанк-Онлайн" Крыгин Иван, Сбербанк-Технологии
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platforms
 
Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Bachelors Diploma Slides Short Version
Bachelors Diploma Slides Short VersionBachelors Diploma Slides Short Version
Bachelors Diploma Slides Short Version
 
Alexandr Makarov - PHP framework Yii
Alexandr Makarov - PHP framework YiiAlexandr Makarov - PHP framework Yii
Alexandr Makarov - PHP framework Yii
 
Yii PHP framework: basics, techniques and some inside info
Yii PHP framework: basics, techniques and some inside infoYii PHP framework: basics, techniques and some inside info
Yii PHP framework: basics, techniques and some inside info
 
алексей диплом презентация
алексей диплом презентацияалексей диплом презентация
алексей диплом презентация
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 

Разработка развесистого API на Yii фреймворке. Коржнев