dump-2013 serverside - Разработка развесистого api - Коржнев...
TRANSCRIPT
![Page 1: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/1.jpg)
Сергей Коржнев
РАЗРАБОТКА РАЗВЕСИСТОГО API
![Page 2: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/2.jpg)
Крайний за архитектуру справочного API 2ГИС
![Page 3: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/3.jpg)
Справочное API 2ГИС
http://catalog.api.2gis.ru/search
?what=музей &where=Москва &version=1.3 &key=1234567890 &output=json
![Page 4: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/4.jpg)
API 2ГИС в цифрах
уников в месяц
online
более 500 проектов
> 10 000 000
Эффективная и полезнаямонетизация API
Р
![Page 5: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/5.jpg)
Большой API
Сложное внутреннееустройство
Более 50 методов
![Page 6: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/6.jpg)
Технологический стек
![Page 7: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/7.jpg)
![Page 8: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/8.jpg)
Аспекты
ДокументацияАвтотестыАрхитектура
![Page 9: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/9.jpg)
Архитектура
— F(t)
— Сначала простая
— Потом чуть посложнее
![Page 10: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/10.jpg)
Прототип
— Требования— Реализация
![Page 11: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/11.jpg)
Маленькое API
— Просто
— Быстро
— Стандартная архитектура
![Page 12: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/12.jpg)
Стандартный подход не работает
![Page 13: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/13.jpg)
Борьба со сложностью
![Page 14: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/14.jpg)
Слоистая архитектура
The Seven Layers of OSI
Physical Link
UserTransmit
DataReceive
DataApplication Layer
Physical Layer
Data Link Layer
Network Layer
Transport Layer
Session Layer
Presentation Layer
Application Layer
![Page 15: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/15.jpg)
MVC
Model
ControllerView
![Page 16: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/16.jpg)
Компоненты архитектурыКомпоненты архитектуры
Модель: Бизнес-логика и ActiveRecord
Представление
Контроллер
Объект запроса
Валидатор запроса
![Page 17: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/17.jpg)
Модель
ActiveRecord
Бизнес-логика
Controller
![Page 18: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/18.jpg)
Бизнес-логика
Yii-расширения
Класс CApplicationComponent
Yii::app()->geoCoder
![Page 19: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/19.jpg)
Конфигурация
return array(
'components' => array(
'geoCoder' => array(
'class' => 'ext.geoCoder.ExtGeoCoder',
'country' => 'Russia'
),
...
),
);
![Page 20: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/20.jpg)
ActiveRecord
![Page 21: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/21.jpg)
Chuck Norris approved
![Page 22: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/22.jpg)
Представление
Рендеринг в файлах
Рендеринг в классе
Контроллер – Представление
JSON, XML
![Page 23: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/23.jpg)
Объект запроса
Грязный контроллер
Чистый контроллер
![Page 24: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/24.jpg)
Объект запроса
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),
);
}
}
![Page 25: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/25.jpg)
Валидатор объекта запроса
class WhatValidator extends Validator {
public function run(RequestModel $model) {
// ...
}
}
![Page 26: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/26.jpg)
return array(
'components' => array(
'geoCoder' => array(
'class' => 'ext.geoCoder.ExtGeoCoder',
'country' => 'Russia'
),
...
),
);
Объект запроса
Нет состояния
Декларативный подход
Наглядность
![Page 27: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/27.jpg)
Структура директорий
/protected /controllers GeoController.php /views GeoView.php /requests /geo GeoSearchRequest.php /extensions /geo ExtGeo.php /models /components
![Page 28: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/28.jpg)
Модель: Бизнес-логика и ActiveRecord
Представление
Контроллер
Объект запроса
Валидатор запроса
ВыводыКомпоненты архитектуры
Модель: Бизнес-логика и ActiveRecord
Представление
Контроллер
Объект запроса
Валидатор запроса
![Page 29: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/29.jpg)
Автотесты
![Page 30: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/30.jpg)
Гибридные тесты
Зависимости
Подмена данных
![Page 31: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/31.jpg)
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),
);
}
}
JSON Schema
Структура
Обязательность
Тип данных
XML Schema
![Page 32: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/32.jpg)
PHP-реализация
Сам формат
http://json-schema.org/
PHP-библиотека от института Беркли
https://github.com/justinrainbow/json-schema
![Page 33: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/33.jpg)
JSON
{ "a":10, "b":"boo" }
![Page 34: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/34.jpg)
/protected /controllers GeoController.php /views GeoView.php /requests /geo GeoSearchRequest.php /extensions /geo ExtGeo.php /models /components
JSON Schema для него
{ "a":10, "b":"boo" }
{
"a": {
"type": "number",
"required": true
},
"b": {
"type": "string",
"required": true
}
}
![Page 35: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/35.jpg)
Использование JSON Schema
Фильтр ответа
Тестируем в фоне
Включаем во время тестов
"additionalProperties": false
![Page 36: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/36.jpg)
Приоритеты тестов
Публичный интерфейс
JSON Schema
Дешево
Часто используется
Бизнес-логика
![Page 37: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/37.jpg)
Документация
— Ветка на фичу
— Вместе с кодом
— Актуальность
— Да ну её нафиг!
![Page 38: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/38.jpg)
Тема: Бульдог + Носорог
"reviews_count": {
"type": "number",
"required": true,
"meta": {
"description": "Количество отзывов"
}
},
![Page 39: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/39.jpg)
JSON Schema + документация
Дешевая документация
Автоматический рендеринг
Тесты на документацию
![Page 40: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/40.jpg)
Итоги
Большой API
Архитектура
Автотесты
Документация
![Page 41: DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей](https://reader033.vdocuments.us/reader033/viewer/2022042521/5566a509d8b42a643c8b4a0d/html5/thumbnails/41.jpg)
{
"a": {
"type": "number",
"required": true
},
"b": {
"type": "string",
"required": true
}
}
Спасибо. Вопросы[email protected]Сергей Коржнев