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

PDF
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
PDF
Symfony в архитектуре Upwork Enterprise
PPTX
Stilt Soft - Speakeasy для расширения продуктов Atlassian
PPTX
Teamlead - Расширение границ с помощью плагинов
PPTX
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
PDF
Виктор Розаев - Как не сломать обратную совместимость в Public API
PPTX
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
PPTX
Сбор и анализ требований в Scrum. Адаптация процесса ICONIX
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
Symfony в архитектуре Upwork Enterprise
Stilt Soft - Speakeasy для расширения продуктов Atlassian
Teamlead - Расширение границ с помощью плагинов
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
Виктор Розаев - Как не сломать обратную совместимость в Public API
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
Сбор и анализ требований в Scrum. Адаптация процесса ICONIX

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

PDF
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
PDF
Слоистая архитектура
PDF
Максим Хромцов "Yandex MapKit для Android OS в примерах"
PDF
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
PPT
Общая архитектура Yii2
PDF
Cергей Коржнев, 2ГИС
ODP
александр макаров Yii Rit 2010
PPTX
Особенности разработки API / Всеволод Шмыров (Яндекс)
PDF
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
PPT
Yii rit 2010
PDF
"Рекомендации по проектированию API". Марина Степанова, Яндекс
PDF
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
PDF
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
PDF
Александр Тармолов "API Яндекс.Карт"
PDF
Фёдор Голубев "API Яндекс.Карт"
PDF
Фёдор Голубев, Леонид Шныр "Яндекс.Карты: между пользователем и разработчиком"
PPT
KlyuchYuriy_for_code4russia
PDF
Что API Карт забыл на сервере — Антон Корзунов
PDF
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
PDF
Yandex.Frontend: complex services, complex solutions
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Слоистая архитектура
Максим Хромцов "Yandex MapKit для Android OS в примерах"
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
Общая архитектура Yii2
Cергей Коржнев, 2ГИС
александр макаров Yii Rit 2010
Особенности разработки API / Всеволод Шмыров (Яндекс)
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Yii rit 2010
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Александр Тармолов "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев, Леонид Шныр "Яндекс.Карты: между пользователем и разработчиком"
KlyuchYuriy_for_code4russia
Что API Карт забыл на сервере — Антон Корзунов
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
Yandex.Frontend: complex services, complex solutions
Ad

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