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

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

  • Upload
    2-

  • View
    2.601

  • Download
    2

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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

Сергей Коржнев

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

Крайний за архитектуру справочного API 2ГИС

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

2009 год

>50 фреймворков

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

Технологический стек

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

Справочное API 2ГИС

http://catalog.api.2gis.ru/search

?what=музей &where=Москва &version=1.3 &key=1234567890 &output=json

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

API 2ГИС в цифрах

уников в месяц

online

более 500 проектов

> 10 000 000

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

Большой API

Сложное внутреннееустройство

Более 50 методов

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

Аспекты

ДокументацияАвтотестыАрхитектура

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

Маленькое API

— Просто

— Быстро

— Стандартный подход

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

По мере роста

Разработка

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

По мере роста

Разработка Баги

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

По мере роста

Разработка СложностьБаги

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

Решение

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

Слоистая архитектура

Application Layer

Physical Layer

Data Link Layer

Network Layer

Transport Layer

Session Layer

Presentation Layer

Application Layer

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

MVC

Model

ControllerView

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

Модель

ActiveRecord

Бизнес-логика

Controller

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

Бизнес-логика

Yii-расширения

CApplicationComponent

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

Конфигурация

return [

'components' => [

'geoCoder' => [

'class' => 'ext.geoCoder.ExtGeoCoder',

'country' => 'Russia'

],

//...

],

];

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

ActiveRecord

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

Представление

Model

ControllerView

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

Плохо

Классический рендеринг в файлах

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

Плохо

$this->render('file3', $data);

$this->render('file2', $data);

$this->render('file1', $data);

file2

file1

Контроллер

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

Плохо

Контроллер

Рендеринг

Непосредственные обязанности

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

Хорошо

11Класс контроллера

Класс представления

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

Контроллер

Model

ControllerView

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

Валидация и фильтрация

/geo/search?what=кафе'; DROP TABLE users;

SELECT * FROM users WHERE 'x' = 'x

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

Фильтры контроллера

Лучше, чем ничего

Но можно лучше

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

Запрос

/geo/search?what=кафе

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

Инкапсуляция запроса

class GeoSearchRequest extends RequestModel {

public $what;

}

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

Объект запроса

class GeoSearchRequest extends RequestModel {

public $what;

public function rules() {

return [

['WhatValidator',

'min' => 2,

'max' => 50,

'required' => true

]

];

}

}

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

Валидатор

class WhatValidator extends Validator {

public function run(RequestModel $model) {

// ...

}

}

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

Профит

Программирование

Декларативный подход

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

Структура директорий

/protected /controllers GeoController.php /views GeoView.php /requests /geo GeoSearchRequest.php /extensions /geo ExtGeo.php /models /components

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

/protected /controllers GeoController.php /views GeoView.php /requests /geo GeoSearchRequest.php /extensions /geo ExtGeo.php /models /components

Модель: Бизнес-логика и ActiveRecord

Представление

Контроллер

Объект запроса

Валидатор запроса

ВыводыКомпоненты архитектуры

Модель: Бизнес-логика и ActiveRecord

Контроллер

Представление

Объект запроса

Валидатор запроса

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

Автотесты

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

Unit тесты

Правильно

Дорого

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

Гибридные тесты

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

Гибридные тесты

Данные

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

Гибридные тесты

Усилия Профит

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

class GeoSearchRequest extends RequestModel {

public $what;

public function rules() {

return [

['WhatValidator',

'min' => 2,

'max' => 50,

'required' => true

]

];

}

}

Формат ответа API

Структура

Обязательность

Тип данных

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

Все уже придумано до нас

XML Schema

JSON Schema

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

JSON Schema & PHP

Формат

http://json-schema.org/

Библиотека от института Беркли

https://github.com/justinrainbow/json-schema

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

/protected /controllers GeoController.php /views GeoView.php /requests /geo GeoSearchRequest.php /extensions /geo ExtGeo.php /models /components

JSON

{ "a":10, "b":"boo" }

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

/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 45: Разработка развесистого API на Yii фреймворке. Коржнев

Использование JSON Schema

Включаем только в тестах

В фоне

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

Ложка дёгтя

Дополнительные поля

("additionalProperties": false)

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

Ещё дёгтя

Формат не устаканился

Библиотеки сырые

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

Решение

Подозрительная библиотека

Unit тесты

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

Приоритеты тестов

Публичный интерфейс

JSON Schema

Дешево

Часто используется

Бизнес-логика

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

Документация

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

Документация

— Ветка на фичу

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

Документация

— Ветка на фичу

— Актуальность

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

Документация

— Ветка на фичу

— Актуальность

— Вместе с кодом

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

Документация

— Да ну её нафиг!

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

Бульдог + Носорог

"reviews_count": {

"type": "number",

"required": true,

"meta": {

"description": "Количество отзывов"

}

},

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

JSON Schema + документация

Дешево

Рендеринг

Тесты

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

Итоги

Специфика большого API

Слоистая архитектура

Автотесты

Документация + JSON Schema

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

Спасибо. Вопросы[email protected]Сергей Коржнев