SlideShare a Scribd company logo
1 of 111
Download to read offline
1
2
Рекомендации по
проектированию API
Марина Степанова
3
– Всем привет! Меня зовут
Марина, и я сейчас буду
рассказывать,
как надо проектировать API.
4
5
Начну заново
6
Меня зовут Марина,
и я программист…
7
Меня зовут Марина,
и я программист…
…как и моя мама.
8
Я работаю в команде API Яндекс.Карт
9
2013
…
2012
2011
2010
2009
2008 1.0.0
…
…
1.0.8
1.1.0
…
1.1.21
… 2.0.1
…
2.0.33 2.1-beta
10
2013
…
2012
2011
2010
2009
2008 1.0.0
…
…
1.0.8
1.1.0
…
1.1.21
… 2.0.1
…
2.0.33 2.1-beta
Я начала
здесь
11
300 000 сайтов используют API
15 000 000 пользователей видят карту
через API ежедневно
(это каждый 10-й человек в России)
12
Про что я буду рассказывать
!  В чем основная проблема разработки API
!  Приемы проектирования, которые мы применяем, чтобы с этой
проблемой жить
13
Бонус!
Я буду приводить примеры, когда мы не соблюдали собственные
рекомендации и сильно от этого страдали
Слайды стыда и позора будут помечены специальным знаком
14
15
16
Корень страданий разработчика API
17
О чем таком особенном должен
помнить проектировщик API?
18
Программный код
Пользовательский
интерфейс
К чему все привыкли
19
Чего хотел пользователь?
Понятно
Крутой дизайн
Не глючит
Функциональность
Котики
Няшки
20
Программный
код
Программный
интерфейс
Пользовательский
интерфейс
Все меняется, когда вы делаете API
21
Программный
код
Программный
интерфейс
Пользовательский
интерфейс
Все меняется, когда вы делаете API
22
Мечта каждого программиста –
видеть свой код 1 раз в жизни
23
Чего хочет этот пользователь?
API
Пользовательский код,
работающий с API
Проект
Написал,
отладил и
забыл
24
Если вы ломаете обратную совместимость, пользователь
вынужден вечно переписывать код
1.1.0
1.1.1
1.1.2
Пользовательский код №0
Пользовательский код №1
Пользовательский код №2
Проект
25
И ЕМУ ЭТО НЕ НРАВИТСЯ
Если вы ломаете обратную совместимость, пользователь
вынужден вечно переписывать код
26
А чего хотим мы сами?
27
Чего хотим мы, разработчики API?
!  Править баги
!  Добавлять фичи
! Рефакторить код
28
Мы заморочились и посчитали сколько
строк кода мы переписали за год
2.0.7 2.0.31
60% кода
поменялось
(без потери обратной совместимости)
29
Итак, причина страданий разработчика API:
Мы должны переписывать свой код,
а пользователи должны свой
не переписывать
30
Смягчить удар позволяет правильное
проектирование системы
31
Наши приемы
проектирования
32
Мы разбиваем систему на уровни
абстракции
33
Пример абстракций в API
Точка
34
Пример абстракций в API
Геообъект
Геометрическая
модель
DOM-макет
Точка
35
При формировании уровней абстракции
мы следуем некоторым правилам,
о которых я и буду говорить
36
Иерархия уровней
37
Иерархия уровней
Геообъект
Геометрическая
модель
DOM-макет
38
В этом месяце мы
должны заработать в
три раза больше
Уровни знают только о своих соседях
39
Уровни знают только о своих соседях
С этого дня
работаете в две
смены
40
Геообъект
Геометрическая
модель
DOM-макет
Не знает, как будет
выглядеть, зато знает
свои координаты
Ничего не знает про
координаты, зато умеет
встраиваться в DOM
Уровни знают только о своих соседях
41
Каждый уровень – это информационный
контекст
42
Каждый уровень – это информационный
контекст
43
Каждый уровень – это информационный
контекст
Геообъект
Геометрическая
модель
DOM-макет
Здесь важны
координаты,
проекция, зум
Здесь важны
пиксельные
координаты окна
карты
44
Максимальное разграничение
обязанностей
45
Максимальное разграничение
обязанностей
46
Максимальное разграничение
обязанностей
Геообъект
Геометрическая
модель
DOM-макет
Canvas-макет
47
Оценим предусмотрительность нашего
старого знакомого
API
Пользовательский код,
работающий с API
Проект
Как знал, что
понадобится!
48
Система превращается в большой конструктор, в котором легко
заменяются части
49
Части вашей системы должны между
собой как-то взаимодействовать
50
Взаимодействие на событиях
«Я подвинулась»
«Карта подвинулась, надо бы
перерисоваться»
«Так, говорят надо
перерисовываться, двигай наш div»
Геообъект
Геометрическа
я модель
DOM-макетКарта
51
События дают много места для маневра
52
В 2.1-beta мы сделали адаптивный дизайн
53
size = “small” size = “large”
54
«Большой» макет реагирует на все события
Контрол
пробок
addtomap!
55
Контрол
пробок
select!
«Большой» макет реагирует на все события
56
Контрол
пробок
expand!
«Большой» макет реагирует на все события
57
Маленький макет…
select!
expand!
enable!
providerchange!
Контрол
пробок
ЭЭЭ…
58
Маленький макет делает что может
Контрол
пробок
59
Плюсы взаимодействия на событиях
!  Слабая связанность объектов
!  Легко «подцепить» новую сущность
!  Абстрагируетесь от соседей
!  Можно реагировать на события частично
60
Что мы узнали про уровни абстракции
!  Нужно выстроить иерархию взаимодействия
!  Уровни знают только о своих соседях
!  Уровень – это информационный контекст
!  Максимально разграничиваем обязанности
!  Взаимодействие уровней через события
61
Мы строили, строили и наконец построили -
Наша система состоит из множества небольших сущностей,
взаимодействующих между собой.
62
Мы строили, строили и наконец построили -
Наша система состоит из множества небольших сущностей,
взаимодействующих между собой.
Это надо отметить описать!
63
На арену выходят программные
интерфейсы
64
Что такое программный интерфейс?
!  Описание функциональности, которую предоставляет
компонент. Причем в определенном контексте.
!
IChild!
!.getParent() // Описание методов.!
!.setParent()!
!@parentchange // Описание событий. !
!
65
Интерфейсы наследуются
ICustomizable
IChildOnMap
IGeoObject
Объект, у которого есть менеджер
опций
Объект, добавляемый на карту
Геообъект
(свои методы +
композиция более
мелких интерфейсов)
66
Какие задачи решают программные
интерфейсы?
67
Вспомним пример, в котором мы хотели
заменить один из компонентов
Геообъект
Геометрическая
модель
DOM-макет
Canvas-макет
68
Как понять, насколько точно нам надо скопировать заменяемую
сущность, чтобы система не рухнула?
DOM-макет
Canvas-макет
69
Если вы описываете интерфейсы, проблем
такого рода не возникает
IGeoObject IOverlay ILayout
На это место можно поместить
любую реализацию интерфейса
70
Какие задачи решают программные
интерфейсы
!  Вы получаете формальное описание вашей системы
!  Сущности становятся легко заменяемыми (подойдет любая
реализация интерфейса)
71
!  Когда вы продумываете
программные интерфейсы,
вы наводите порядок у
себя в голове
72
Интерфейсы должны быть дробными
ICollection
IParentOnMap
ymaps.Collection
ymaps.GeoObjectCollection
73
Если в вашем интерфейсе много сущностей
- это повод задуматься
setParent()
getParent()
.options
.events
IChild
ICustomizable
IEventEmitter
74
Названия, ключи, алиасы должны
быть очень конкретными
75
– Петька, get()!
– 32!
– Что 32?
– А что get()?
76
Грустный пример из реальной жизни
www.somesite.ru?%с&%n&%l&%j%s
Для расшифровки этого url нужно выучить небольшой
нелогичный алфавит:
%c – coordinates
%l – lang
%n – layer (ну потому что %l занято)
%j – id (пошло от «jam»)
%s – timestamp (потому что «stamp»)
77
В какой момент пора выделять
программные интерфейсы?
78
Вариант №1 (неправильный)
1.  Выделяем уровни абстракции
2.  Пишем код
3.  Описываем получившиеся интерфейсы
79
Почему этот вариант неправильный?
80
У нас в 2.0 появился кластеризатор
81
Метки собираются в объект-кластер
Кластеризатор
Объект-кластер
82
Кластеризатору для работы нужно знать,
сколько меток в каждом кластере
???
83
Кластеризатору для работы нужно знать,
сколько меток в каждом кластере
Можно хранить
данные у себя
Можно спрашивать
у кластера???
84
Идем по пути наименьшего сопротивления
Кластеризатор
Объект-кластер
cluster.getGeoObjects()
85
Кластеризатор
Объект-кластер
Позже утверждаем интерфейсы
86
IGeoObject
Позже утверждаем интерфейсы
Кластеризатор
Объект-кластер
87
ICollectionIGeoObject
Позже утверждаем интерфейсы
Объект-кластер
88
ICollectionIGeoObject IGeoObject
Позже утверждаем интерфейсы
89
Подставим интерфейсы в схему
ICollection
cluster.getGeoObjects()
IGeoObject
IGeoObject IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
90
Подставим интерфейсы в схему
ICollection
cluster.getGeoObjects()
IGeoObject
IGeoObject IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
IGeoObject
Этот метод больше нельзя
использовать – он
не входит в интерфейс
91
Как реально выглядит процесс
1.  Выделяем уровни абстракции
2.  Пишем код
3.  Описываем получившиеся интерфейсы
4.  Переписываем код, чтобы все сущности использовали только
интерфейсные методы
92
Вариант №2 (правильный)
1.  Выделяем уровни абстракции
2.  Описываем интерфейсы
3.  Пишем код, в котором объекты взаимодействуют через
интерфейсные методы, поля, события
93
Интерфейсы изменят ваш проект
94
Подобное станет подобным
Placemark
Polygon
Polyline
IGeoObject
95
Мы не успели отточить интерфейсы
контролов при запуске
Контролы писали разные люди, в результате
получили немного разные конструкторы
Button(params, options)!
TrafficControl(state, options)!
SearchControl(options)!
96
Обратная сторона интерфейсов
!  Из-за того, что объекты
станут композициями дробных
интерфейсов, конечные
объекты могут иметь несколько
монструозный и избыточный
интерфейс.
97
У нас чудесным, но монструозным вышел
IGeoObject
! var myPlacemark = new ymaps.GeoObject({!
! !geometry: { !
! ! !type: “Point”,!
! ! !coordinates: [37.61, 55.75] !
! !},!
! !properties: {!
! ! !balloonContent: ‘Hello!’,!
! ! !id: 723!
! !}!
!}, {!
! !// Опции.!
! !preset: ‘twirl#redIcon’,!
! !zIndex: 100!
!});!
98
Мы выбрали самые частые варианты использования и сделали
для них хелперы
99
Создавать метки стало проще
!
!var myPlacemark = new ymaps.Placemark([37.61, 55.75], {!
! ! !// Данные.!
! ! !balloonContent: ‘Hello!’,!
! ! !id: 723!
! !}, {!
! ! !// Опции.!
! ! !zIndex: 100,!
! ! !preset: ‘twirl#redIcon’!
! !}); !
!
100
Также вас спасут значения по умолчанию
Программист изучает опции геообъекта только в тот момент,
когда они ему понадобятся и не забивает голову ненужным
мусором
101
Еще одна военная хитрость
Публичная	
  
часть	
   Наше API
102
Все вылизано,
документировано, никогда не
изменится
Публичная
часть
Закрытая часть
103
Все вылизано,
документировано, никогда не
изменится
Публичная
часть
Закрытая часть
104
Публичная
часть
Закрытая часть
Таких ситуаций быть не должно
105
Мы открывали сущности постепенно
2.0.14 2.0.33
106
Лучше открыть мало, но хорошо,
чем много, но плохо
107
Подведем итоги
108
Вывод №1
!  Мы в ответе за тех,
кто пользуется
нашим API
109
Вывод №2
!  Проектирование
большой системы –
сложный процесс.
Но если заложить
верные принципы,
все получится.
110
Спасибо за внимание
111
Степанова Марина
Разработчик интерфейсов
mstepanova@yandex-team.ru
! ya_mstepanova
© ООО «Яндекс», 2013

More Related Content

What's hot

"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
Что API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновЧто API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновYandex
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Empatika
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updatesAnton Ivanov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphicsSoftTechnics
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 

What's hot (19)

"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Foxdevs
FoxdevsFoxdevs
Foxdevs
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
Javascript
JavascriptJavascript
Javascript
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
Что API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновЧто API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон Корзунов
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updates
 
Gemini presentation
Gemini presentationGemini presentation
Gemini presentation
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Javascript
JavascriptJavascript
Javascript
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphics
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 

Viewers also liked

"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс
"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс
"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, ЯндексYandex
 
Whale Rider.Ya Money.Project.Tools
Whale Rider.Ya Money.Project.ToolsWhale Rider.Ya Money.Project.Tools
Whale Rider.Ya Money.Project.ToolsWRider
 
Project Initiation Checklist
Project Initiation ChecklistProject Initiation Checklist
Project Initiation ChecklistAnand Subramaniam
 
Legal Audit Power Point
Legal Audit Power PointLegal Audit Power Point
Legal Audit Power Pointdja2law
 
Project Execution & Control Checklist
Project Execution & Control ChecklistProject Execution & Control Checklist
Project Execution & Control ChecklistAnand Subramaniam
 
Audit Checklist for Information Systems
Audit Checklist for Information SystemsAudit Checklist for Information Systems
Audit Checklist for Information SystemsAhmad Tariq Bhatti
 
Project audit & review checklist
Project audit & review checklistProject audit & review checklist
Project audit & review checklistRam Srivastava
 
How to Effectively Audit your IT Infrastructure
How to Effectively Audit your IT InfrastructureHow to Effectively Audit your IT Infrastructure
How to Effectively Audit your IT InfrastructureNetwrix Corporation
 
04 a iso 9001 2015 checklist
04 a iso 9001 2015 checklist04 a iso 9001 2015 checklist
04 a iso 9001 2015 checklistSon Pham
 

Viewers also liked (10)

"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс
"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс
"API как полноценный продукт" — Наталия Францева и Екатерина Текунова, Яндекс
 
Whale Rider.Ya Money.Project.Tools
Whale Rider.Ya Money.Project.ToolsWhale Rider.Ya Money.Project.Tools
Whale Rider.Ya Money.Project.Tools
 
Project Initiation Checklist
Project Initiation ChecklistProject Initiation Checklist
Project Initiation Checklist
 
Legal Audit Power Point
Legal Audit Power PointLegal Audit Power Point
Legal Audit Power Point
 
Project Execution & Control Checklist
Project Execution & Control ChecklistProject Execution & Control Checklist
Project Execution & Control Checklist
 
Audit Checklist for Information Systems
Audit Checklist for Information SystemsAudit Checklist for Information Systems
Audit Checklist for Information Systems
 
Project audit & review checklist
Project audit & review checklistProject audit & review checklist
Project audit & review checklist
 
How to Effectively Audit your IT Infrastructure
How to Effectively Audit your IT InfrastructureHow to Effectively Audit your IT Infrastructure
How to Effectively Audit your IT Infrastructure
 
Checklist
ChecklistChecklist
Checklist
 
04 a iso 9001 2015 checklist
04 a iso 9001 2015 checklist04 a iso 9001 2015 checklist
04 a iso 9001 2015 checklist
 

Similar to "Рекомендации по проектированию API" — Марина Степанова, Яндекс

"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, ЯндексYandex
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Development User Group
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C codeDenis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
Formal Verification of a Linux Security Module
Formal Verification of a Linux Security ModuleFormal Verification of a Linux Security Module
Formal Verification of a Linux Security ModuleDenis Efremov
 
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
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverSQALab
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляцииRoman Dvornov
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОYandex
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Ontico
 

Similar to "Рекомендации по проектированию API" — Марина Степанова, Яндекс (20)

"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Моделирование поведения сложных динамических систем
Моделирование поведения сложных динамических системМоделирование поведения сложных динамических систем
Моделирование поведения сложных динамических систем
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Formal Verification of a Linux Security Module
Formal Verification of a Linux Security ModuleFormal Verification of a Linux Security Module
Formal Verification of a Linux Security Module
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх Webdriver
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

"Рекомендации по проектированию API" — Марина Степанова, Яндекс