SlideShare uma empresa Scribd logo
1 de 71
Baixar para ler offline
1
2
Разработка RESTful API
with all the bells and
whistles
Роман Акинфеев
3
Яндекс.Диск — это сервис, который позволяет
хранить файлы и обмениваться ими, а также
предоставляет доступ к файлам с любого
устройства, подключённого к интернету.
• 20+ млн. зарегистрированных пользователей
• 10+ млн. загружаемых в сутки файлов
• 7+ млрд. файлов
4
Яндекс.Диск — это сервис, который позволяет
хранить файлы и обмениваться ими, а также
предоставляет доступ к файлам с любого
устройства, подключённого к интернету.
• 20+ млн. зарегистрированных пользователей
10+ млн. загружаемых в сутки файлов
7+ млрд. файлов
5
Яндекс.Диск — это сервис, который позволяет
хранить файлы и обмениваться ими, а также
предоставляет доступ к файлам с любого
устройства, подключённого к интернету.
• 20+ млн. зарегистрированных пользователей
• 10+ млн. загружаемых в сутки файлов
7+ млрд. файлов
6
Яндекс.Диск — это сервис, который позволяет
хранить файлы и обмениваться ими, а также
предоставляет доступ к файлам с любого
устройства, подключённого к интернету.
• 20+ млн. зарегистрированных пользователей
• 10+ млн. загружаемых в сутки файлов
• 7+ млрд. файлов
7
Yandex Disk APIs
WebDAV
Для работы с Диском, как с файловой системой
RESTful API
Для работы с Диском там, где WebDAV’а мало
8
Yandex Disk APIs
WebDAV
Для работы с Диском, как с файловой системой
RESTful API
Для работы с Диском там, где WebDAV’а мало
9
Задачи
10
Задачи
• Простота изучения возможностей API
Легко расширяемая функциональность
Простота разработки под API
11
Задачи
• Простота изучения возможностей API
• Легко расширяемая функциональность
Простота разработки под API
12
Задачи
• Простота изучения возможностей API
• Легко расширяемая функциональность
• Простота разработки под API
13
RESTful API Яндекс Диска
• Понятная и логичная структура
Hypermedia API
Self-descriptive & Machine-readable API
14
RESTful API Яндекс Диска
• Понятная и логичная структура
• Hypermedia API
Self-descriptive & Machine-readable API
15
RESTful API Яндекс Диска
• Понятная и логичная структура
• Hypermedia API
• Self-descriptive & Machine-readable API
16
Что такое REST?
• Просто набор принципов
• Никаких готовых решений
• Только ограничения
17
Клиент-сервер и интерфейс
• Клиент и сервер знают
интерфейс
• Клиент и сервер не знают
друг друга
Профит
Много клиентов хороших и
разных
Сервер не замечает, как
обновляются клиенты
Клиенты не замечают, как
обновляется сервер
18
Клиент-сервер и интерфейс
• Клиент и сервер знают
интерфейс
• Клиент и сервер не знают
друг друга
Профит
• Много клиентов хороших и
разных
• Сервер не замечает, как
обновляются клиенты
• Клиенты не замечают, как
обновляется сервер
19
Stateless
• Сервер не хранит никакой информации о состоянии
клиента между запросами
Нет соединений
Нет сессий
Нет истории операций клиента
Профит
Бэкэнд легко масштабируется
Клиент не беспокоится ни о чём между запросами
20
Stateless
• Сервер не хранит никакой информации о состоянии
клиента между запросами
• Нет соединений
• Нет сессий
• Нет истории операций клиента
Профит
Бэкэнд легко масштабируется
Клиент не беспокоится ни о чём между запросами
21
Stateless
• Сервер не хранит никакой информации о состоянии
клиента между запросами
• Нет соединений
• Нет сессий
• Нет истории операций клиента
Профит
• Бэкэнд легко масштабируется
• Клиент не беспокоится ни о чём между запросами
22
Кэшируемость и многослойность
• Сервер сообщает, что и как кэшировать
• Клиент может не соединяться напрямую с сервером
Профит
Возможность снизить нагрузку на бэкэнд
Возможность работать с кэшем на клиенте
23
Кэшируемость и многослойность
• Сервер сообщает, что и как кэшировать
• Клиент может не соединяться напрямую с сервером
Профит
• Возможность снизить нагрузку на бэкэнд
• Возможность работать с кэшем на клиенте
24
Рецепт
RESTful API Яндекс Диска
25
Ресурсы
26
Ресурсы
• Система оперирует ресурсами
Ресурсы имеют чёткую структуру
URL – уникальный идентификатор ресурса
Ресурсы API Диска:
Файлы и папки – resources
Асинхронные операции – operations
27
Ресурсы
• Система оперирует ресурсами
• Ресурсы имеют чёткую структуру
URL – уникальный идентификатор ресурса
Ресурсы API Диска:
Файлы и папки – resources
Асинхронные операции – operations
28
Ресурсы
• Система оперирует ресурсами
• Ресурсы имеют чёткую структуру
• URL – уникальный идентификатор ресурса
Ресурсы API Диска:
Файлы и папки – resources
Асинхронные операции – operations
29
Ресурсы
• Система оперирует ресурсами
• Ресурсы имеют чёткую структуру
• URL – уникальный идентификатор ресурса
Ресурсы API Диска:
• Файлы и папки – resources
• Асинхронные операции – operations
30
URL ресурсов
31
URL ресурсов
URL группируются в нэймспэйсы
/disk
URL коллекции ресурсов всегда во множественном числе
/disk / resources
/disk / operations
URL коллекции + идентификатор = URL ресурса
/disk / resources ? path={path}
/disk / operations ? id={id}
/pets / kittens / {name}
32
URL ресурсов
URL группируются в нэймспэйсы
/disk
URL коллекции ресурсов всегда во множественном числе
/disk / resources
/disk / operations
URL коллекции + идентификатор = URL ресурса
/disk / resources ? path={path}
/disk / operations ? id={id}
/pets / kittens / {name}
33
URL ресурсов
URL группируются в нэймспэйсы
/disk
URL коллекции ресурсов всегда во множественном числе
/disk / resources
/disk / operations
URL коллекции + идентификатор = URL ресурса
/disk / resources ? path={path}
/disk / operations ? id={id}
/pets / kittens / {name}
34
URL ресурсов
URL группируются в нэймспэйсы
/disk
URL коллекции ресурсов всегда во множественном числе
/disk / resources
/disk / operations
URL коллекции + идентификатор = URL ресурса
/disk / resources ? path={path}
/disk / operations ? id={id}
/pets / kittens / {name}
35
HTTP-методы
Основные CRUD-операции:
GET, POST, PUT, DELETE
36
HTTP-методы
GET – безопасный. Делаем запрос, не задумываясь:
GET /disk/resources?path={path}
GET /disk/operations?id={id}
GET, PUT, DELETE – идемпотентные. Повторяем при обрыве,
не задумываясь:
PUT /disk/resources?path={path}
DELETE /disk/resources?path={path}
POST – опасный. Изменяет состояние ресурса, повторять
опасно
OPTIONS – подскажет поддерживаемые ресурсом методы
37
HTTP-методы
GET – безопасный. Делаем запрос, не задумываясь:
GET /disk/resources?path={path}
GET /disk/operations?id={id}
GET, PUT, DELETE – идемпотентные. Повторяем при обрыве,
не задумываясь:
PUT /disk/resources?path={path}
DELETE /disk/resources?path={path}
POST – опасный. Изменяет состояние ресурса, повторять
опасно
OPTIONS – подскажет поддерживаемые ресурсом методы
38
HTTP-методы
GET – безопасный. Делаем запрос, не задумываясь:
GET /disk/resources?path={path}
GET /disk/operations?id={id}
GET, PUT, DELETE – идемпотентные. Повторяем при обрыве,
не задумываясь:
PUT /disk/resources?path={path}
DELETE /disk/resources?path={path}
POST – опасный. Изменяет состояние ресурса, повторять
опасно
OPTIONS – подскажет поддерживаемые ресурсом методы
39
HTTP-методы
GET – безопасный. Делаем запрос, не задумываясь:
GET /disk/resources?path={path}
GET /disk/operations?id={id}
GET, PUT, DELETE – идемпотентные. Повторяем при обрыве,
не задумываясь:
PUT /disk/resources?path={path}
DELETE /disk/resources?path={path}
POST – опасный. Изменяет состояние ресурса, повторять
опасно
OPTIONS – подскажет поддерживаемые ресурсом методы
40
Когда CRUD мало
41
Когда CRUD мало
Копирование и Перемещение
• Не идемпотентны
• Не безопасны
Надо использовать POST, но метод один, а операции две
На помощь приходят они! Ad Hoc-методы!
POST /disk/resources/ copy ? path={path}&from={from}
POST /disk/resources/ move ? path={path}&from={from}
42
Когда CRUD мало
Копирование и Перемещение
• Не идемпотентны
• Не безопасны
Надо использовать POST, но метод один, а операции две
На помощь приходят они! Ad Hoc-методы!
POST /disk/resources/ copy ? path={path}&from={from}
POST /disk/resources/ move ? path={path}&from={from}
43
Когда CRUD мало
Копирование и Перемещение
• Не идемпотентны
• Не безопасны
Надо использовать POST, но метод один, а операции две
На помощь приходят они! Ad Hoc-методы!
POST /disk/resources/ copy ? path={path}&from={from}
POST /disk/resources/ move ? path={path}&from={from}
44
The Bells And Whistles
RESTful API Яндекс Диска
45
Hypermedia API
Предоставлять данные о том, что можно делать с каждым ресурсом.
Hypermedia as the Engine of Application State
Клиент должен взаимодействовать с сервером посредством
hypermedia-контролов, получаемых от сервера.
Профит
Клиент не дёргает захардкоденные URL
Клиент переходит по ссылкам
46
Hypermedia API
Предоставлять данные о том, что можно делать с каждым ресурсом.
Hypermedia as the Engine of Application State
Клиент должен взаимодействовать с сервером посредством
hypermedia-контролов, получаемых от сервера.
Профит
Клиент не дёргает захардкоденные URL
Клиент переходит по ссылкам
47
Hypermedia API
Предоставлять данные о том, что можно делать с каждым ресурсом.
Hypermedia as the Engine of Application State
Клиент должен взаимодействовать с сервером посредством
hypermedia-контролов, получаемых от сервера.
Профит
• Клиент не дёргает захардкоденные URL
• Клиент переходит по ссылкам
48
Hypermedia API
• Collection+JSON
• HAL
• DocJSON
• JSON API
• JSON Hyperschema
49
Hypertext Application Language
• Чрезвычайно прост
• Есть draft RFC-стандарта
• Уже встречается в публичных API
• MIME-type: application/hal+json
Благодаря HAL
Клиент знает, что и как может сделать с объектом
Сервер может управлять набором доступных действий
50
Hypertext Application Language
• Чрезвычайно прост
• Есть draft RFC-стандарта
• Уже встречается в публичных API
• MIME-type: application/hal+json
Благодаря HAL
• Клиент знает, что и как может сделать с объектом
• Сервер может управлять набором доступных действий
51
Обычное API
# пусть у нас есть объект папки
print folder
{
“name”: “foo”,
“path”: “disk:/foo”,
“type”: “dir”
}
# удаляем папку
URL = 'https://cloud-api.yandex.net/v1/disk/resources'
query = {}
query['path'] = folder['path']
query['permanently'] = True
qs = urlencode(query)
url = URL + '?' + qs
request('DELETE', url)
<Response [204]>
52
Hypermedia API
# пусть у нас есть объект папки с HAL-ссылками
print folder
{
"_links": {
"delete": {
"href": "https://cloud-
api.yandex.net/v1/disk/resources?path=disk%3A%2Ffoo&permanently=True",
"method": "DELETE"
},
},
“name”: “foo”,
“path”: “disk:/foo”,
“type”: “dir”
}
# удаляем папку
action = folder[‘_links’][‘delete’]
request(action[‘method’], action[‘href’])
<Response [204]>
53
Self-describing & Machine-readable
Машиночитаемые способы описания REST API
• RAML
• WADL
• JSON Schema + JSON HyperSchema
• Swagger
• IO Docs
• Apiary Blueprints
54
Swagger
• Описывает API в виде JSON
• Развивается как стандарт
• Прост для понимания
• Имеет экосистему инструментов
55
Swagger описывает
• Структуру API
• Параметры операций над ресурсами
• Структуру возвращаемых объектов
56
Профит от Swagger
• Универсальные Swagger-клиенты
• Автогенерация частей нативных SDK
• Готовый open source UI для API
57
tech.yandex.ru/disk/poligon
58
Что в итоге получилось
59
Что в итоге получилось
• Понятная и расширяемая структура
Удобная навигация по API с помощью ссылок
Самодокументируемость и машиночитаемость
60
Что в итоге получилось
• Понятная и расширяемая структура
• Удобная навигация по API с помощью ссылок
Самодокументируемость и машиночитаемость
61
Что в итоге получилось
• Понятная и расширяемая структура
• Удобная навигация по API с помощью ссылок
• Самодокументируемость и машиночитаемость
62
Рецепт правильного REST API
63
Рецепт правильного REST API
• Структура в виде ресурсов и операций над ними
Доступ к объектам через коллекции
Старайтесь придерживаться RFC 2616
Используйте Ad Hoc-методы там где не хватает HTTP
Добавляйте в API hypermedia-контролы
HAL – http://stateless.co/hal_specification.html
Описывайте API с помощью машиночитаемых форматов
Swagger – https://helloreverb.com/developers/swagger
64
Рецепт правильного REST API
• Структура в виде ресурсов и операций над ними
• Доступ к объектам через коллекции
Старайтесь придерживаться RFC 2616
Используйте Ad Hoc-методы там где не хватает HTTP
Добавляйте в API hypermedia-контролы
HAL – http://stateless.co/hal_specification.html
Описывайте API с помощью машиночитаемых форматов
Swagger – https://helloreverb.com/developers/swagger
65
Рецепт правильного REST API
• Структура в виде ресурсов и операций над ними
• Доступ к объектам через коллекции
• Старайтесь придерживаться RFC 2616
Используйте Ad Hoc-методы там где не хватает HTTP
Добавляйте в API hypermedia-контролы
HAL – http://stateless.co/hal_specification.html
Описывайте API с помощью машиночитаемых форматов
Swagger – https://helloreverb.com/developers/swagger
66
Рецепт правильного REST API
• Структура в виде ресурсов и операций над ними
• Доступ к объектам через коллекции
• Старайтесь придерживаться RFC 2616
• Используйте Ad Hoc-методы там где не хватает HTTP
Добавляйте в API hypermedia-контролы
HAL – http://stateless.co/hal_specification.html
Описывайте API с помощью машиночитаемых форматов
Swagger – https://helloreverb.com/developers/swagger
67
Рецепт правильного REST API
• Структура в виде ресурсов и операций над ними
• Доступ к объектам через коллекции
• Старайтесь придерживаться RFC 2616
• Используйте Ad Hoc-методы там где не хватает HTTP
• Добавляйте в API hypermedia-контролы
HAL – http://stateless.co/hal_specification.html
Описывайте API с помощью машиночитаемых форматов
Swagger – https://helloreverb.com/developers/swagger
68
Рецепт правильного REST API
• Структура в виде ресурсов и операций над ними
• Доступ к объектам через коллекции
• Старайтесь придерживаться RFC 2616
• Используйте Ad Hoc-методы там где не хватает HTTP
• Добавляйте в API hypermedia-контролы
HAL – http://stateless.co/hal_specification.html
• Описывайте API с помощью машиночитаемых форматов
Swagger – https://helloreverb.com/developers/swagger
69
Для чего использовать API Диска
• Работа с контентом пользователей
• Синхронизация данных между устройствами
• Хранение user-related данных приложений
70
Спасибо за внимание!
71
Роман Акинфеев
Разработчик back-end и REST API Яндекс.Диска
Клуб разработчиков:
Сервис «Полигон»: tech.yandex.ru/disk/poligon
clubs.ya.ru/apidisk/

Mais conteúdo relacionado

Mais procurados

Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияMatvey Malkov
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годBadoo Development
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Andrey Smirnov
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Igor Brovchenko
 
Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»Yandex
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Oleg Tsarev
 
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Ontico
 
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.Tech Talks @NSU
 
WordPress REST API
WordPress REST APIWordPress REST API
WordPress REST APIIgor Sazonov
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Ontico
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Полуавтоматизация third-party API
Полуавтоматизация third-party APIПолуавтоматизация third-party API
Полуавтоматизация third-party APISQALab
 

Mais procurados (19)

Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011
 
Bazhin 1 zal
Bazhin 1 zal Bazhin 1 zal
Bazhin 1 zal
 
Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»Алексей Бережной — «HTTP-протокл»
Алексей Бережной — «HTTP-протокл»
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
 
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
 
WordPress REST API
WordPress REST APIWordPress REST API
WordPress REST API
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Полуавтоматизация third-party API
Полуавтоматизация third-party APIПолуавтоматизация third-party API
Полуавтоматизация third-party API
 

Semelhante a Роман Акинфеев «Разработка RESTful API with all bells and whistles»

разработка RESTful api with all bells and whistles
разработка RESTful api with all bells and whistles разработка RESTful api with all bells and whistles
разработка RESTful api with all bells and whistles Yandex
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
 
Простой способ мультиплатформенной синхронизации, Алёна Паньшина
Простой способ мультиплатформенной синхронизации, Алёна ПаньшинаПростой способ мультиплатформенной синхронизации, Алёна Паньшина
Простой способ мультиплатформенной синхронизации, Алёна ПаньшинаYandex
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.Alexander Titov
 
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Ontico
 
RESTful API development with Symfony2
RESTful API development with Symfony2RESTful API development with Symfony2
RESTful API development with Symfony2Taras Omelianenko
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтовPlaytini
 
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтовЕвгений Летов
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Tanya Denisyuk
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 
Александр Сидоров "Как защитить пользователей от вирусов и фишинга"
Александр Сидоров "Как защитить пользователей от вирусов и фишинга"Александр Сидоров "Как защитить пользователей от вирусов и фишинга"
Александр Сидоров "Как защитить пользователей от вирусов и фишинга"Yandex
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоАлександр Ежов
 
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite
 
«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»Nata_Churda
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиTech Talks @NSU
 
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMSМихаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMSYandex
 
Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015Alexey Grishchenko
 

Semelhante a Роман Акинфеев «Разработка RESTful API with all bells and whistles» (20)

разработка RESTful api with all bells and whistles
разработка RESTful api with all bells and whistles разработка RESTful api with all bells and whistles
разработка RESTful api with all bells and whistles
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
 
Простой способ мультиплатформенной синхронизации, Алёна Паньшина
Простой способ мультиплатформенной синхронизации, Алёна ПаньшинаПростой способ мультиплатформенной синхронизации, Алёна Паньшина
Простой способ мультиплатформенной синхронизации, Алёна Паньшина
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
 
RESTful API development with Symfony2
RESTful API development with Symfony2RESTful API development with Symfony2
RESTful API development with Symfony2
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтов
 
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтов
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Александр Сидоров "Как защитить пользователей от вирусов и фишинга"
Александр Сидоров "Как защитить пользователей от вирусов и фишинга"Александр Сидоров "Как защитить пользователей от вирусов и фишинга"
Александр Сидоров "Как защитить пользователей от вирусов и фишинга"
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
 
«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузки
 
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMSМихаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
 
Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015
 

Mais de DevDay

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений ТютюевDevDay
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий МузюкинDevDay
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья ПастушковDevDay
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковDevDay
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevDay
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковDevDay
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь КудринDevDay
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил ИльиныхDevDay
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим БерёзкинDevDay
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета АлексеенкоDevDay
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоDevDay
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовDevDay
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя ПономарёвDevDay
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев DevDay
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...DevDay
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел СташевскийDevDay
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья ТаратухинDevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»DevDay
 

Mais de DevDay (20)

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим Пашук
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
 

Роман Акинфеев «Разработка RESTful API with all bells and whistles»

  • 1. 1
  • 2. 2 Разработка RESTful API with all the bells and whistles Роман Акинфеев
  • 3. 3 Яндекс.Диск — это сервис, который позволяет хранить файлы и обмениваться ими, а также предоставляет доступ к файлам с любого устройства, подключённого к интернету. • 20+ млн. зарегистрированных пользователей • 10+ млн. загружаемых в сутки файлов • 7+ млрд. файлов
  • 4. 4 Яндекс.Диск — это сервис, который позволяет хранить файлы и обмениваться ими, а также предоставляет доступ к файлам с любого устройства, подключённого к интернету. • 20+ млн. зарегистрированных пользователей 10+ млн. загружаемых в сутки файлов 7+ млрд. файлов
  • 5. 5 Яндекс.Диск — это сервис, который позволяет хранить файлы и обмениваться ими, а также предоставляет доступ к файлам с любого устройства, подключённого к интернету. • 20+ млн. зарегистрированных пользователей • 10+ млн. загружаемых в сутки файлов 7+ млрд. файлов
  • 6. 6 Яндекс.Диск — это сервис, который позволяет хранить файлы и обмениваться ими, а также предоставляет доступ к файлам с любого устройства, подключённого к интернету. • 20+ млн. зарегистрированных пользователей • 10+ млн. загружаемых в сутки файлов • 7+ млрд. файлов
  • 7. 7 Yandex Disk APIs WebDAV Для работы с Диском, как с файловой системой RESTful API Для работы с Диском там, где WebDAV’а мало
  • 8. 8 Yandex Disk APIs WebDAV Для работы с Диском, как с файловой системой RESTful API Для работы с Диском там, где WebDAV’а мало
  • 10. 10 Задачи • Простота изучения возможностей API Легко расширяемая функциональность Простота разработки под API
  • 11. 11 Задачи • Простота изучения возможностей API • Легко расширяемая функциональность Простота разработки под API
  • 12. 12 Задачи • Простота изучения возможностей API • Легко расширяемая функциональность • Простота разработки под API
  • 13. 13 RESTful API Яндекс Диска • Понятная и логичная структура Hypermedia API Self-descriptive & Machine-readable API
  • 14. 14 RESTful API Яндекс Диска • Понятная и логичная структура • Hypermedia API Self-descriptive & Machine-readable API
  • 15. 15 RESTful API Яндекс Диска • Понятная и логичная структура • Hypermedia API • Self-descriptive & Machine-readable API
  • 16. 16 Что такое REST? • Просто набор принципов • Никаких готовых решений • Только ограничения
  • 17. 17 Клиент-сервер и интерфейс • Клиент и сервер знают интерфейс • Клиент и сервер не знают друг друга Профит Много клиентов хороших и разных Сервер не замечает, как обновляются клиенты Клиенты не замечают, как обновляется сервер
  • 18. 18 Клиент-сервер и интерфейс • Клиент и сервер знают интерфейс • Клиент и сервер не знают друг друга Профит • Много клиентов хороших и разных • Сервер не замечает, как обновляются клиенты • Клиенты не замечают, как обновляется сервер
  • 19. 19 Stateless • Сервер не хранит никакой информации о состоянии клиента между запросами Нет соединений Нет сессий Нет истории операций клиента Профит Бэкэнд легко масштабируется Клиент не беспокоится ни о чём между запросами
  • 20. 20 Stateless • Сервер не хранит никакой информации о состоянии клиента между запросами • Нет соединений • Нет сессий • Нет истории операций клиента Профит Бэкэнд легко масштабируется Клиент не беспокоится ни о чём между запросами
  • 21. 21 Stateless • Сервер не хранит никакой информации о состоянии клиента между запросами • Нет соединений • Нет сессий • Нет истории операций клиента Профит • Бэкэнд легко масштабируется • Клиент не беспокоится ни о чём между запросами
  • 22. 22 Кэшируемость и многослойность • Сервер сообщает, что и как кэшировать • Клиент может не соединяться напрямую с сервером Профит Возможность снизить нагрузку на бэкэнд Возможность работать с кэшем на клиенте
  • 23. 23 Кэшируемость и многослойность • Сервер сообщает, что и как кэшировать • Клиент может не соединяться напрямую с сервером Профит • Возможность снизить нагрузку на бэкэнд • Возможность работать с кэшем на клиенте
  • 26. 26 Ресурсы • Система оперирует ресурсами Ресурсы имеют чёткую структуру URL – уникальный идентификатор ресурса Ресурсы API Диска: Файлы и папки – resources Асинхронные операции – operations
  • 27. 27 Ресурсы • Система оперирует ресурсами • Ресурсы имеют чёткую структуру URL – уникальный идентификатор ресурса Ресурсы API Диска: Файлы и папки – resources Асинхронные операции – operations
  • 28. 28 Ресурсы • Система оперирует ресурсами • Ресурсы имеют чёткую структуру • URL – уникальный идентификатор ресурса Ресурсы API Диска: Файлы и папки – resources Асинхронные операции – operations
  • 29. 29 Ресурсы • Система оперирует ресурсами • Ресурсы имеют чёткую структуру • URL – уникальный идентификатор ресурса Ресурсы API Диска: • Файлы и папки – resources • Асинхронные операции – operations
  • 31. 31 URL ресурсов URL группируются в нэймспэйсы /disk URL коллекции ресурсов всегда во множественном числе /disk / resources /disk / operations URL коллекции + идентификатор = URL ресурса /disk / resources ? path={path} /disk / operations ? id={id} /pets / kittens / {name}
  • 32. 32 URL ресурсов URL группируются в нэймспэйсы /disk URL коллекции ресурсов всегда во множественном числе /disk / resources /disk / operations URL коллекции + идентификатор = URL ресурса /disk / resources ? path={path} /disk / operations ? id={id} /pets / kittens / {name}
  • 33. 33 URL ресурсов URL группируются в нэймспэйсы /disk URL коллекции ресурсов всегда во множественном числе /disk / resources /disk / operations URL коллекции + идентификатор = URL ресурса /disk / resources ? path={path} /disk / operations ? id={id} /pets / kittens / {name}
  • 34. 34 URL ресурсов URL группируются в нэймспэйсы /disk URL коллекции ресурсов всегда во множественном числе /disk / resources /disk / operations URL коллекции + идентификатор = URL ресурса /disk / resources ? path={path} /disk / operations ? id={id} /pets / kittens / {name}
  • 36. 36 HTTP-методы GET – безопасный. Делаем запрос, не задумываясь: GET /disk/resources?path={path} GET /disk/operations?id={id} GET, PUT, DELETE – идемпотентные. Повторяем при обрыве, не задумываясь: PUT /disk/resources?path={path} DELETE /disk/resources?path={path} POST – опасный. Изменяет состояние ресурса, повторять опасно OPTIONS – подскажет поддерживаемые ресурсом методы
  • 37. 37 HTTP-методы GET – безопасный. Делаем запрос, не задумываясь: GET /disk/resources?path={path} GET /disk/operations?id={id} GET, PUT, DELETE – идемпотентные. Повторяем при обрыве, не задумываясь: PUT /disk/resources?path={path} DELETE /disk/resources?path={path} POST – опасный. Изменяет состояние ресурса, повторять опасно OPTIONS – подскажет поддерживаемые ресурсом методы
  • 38. 38 HTTP-методы GET – безопасный. Делаем запрос, не задумываясь: GET /disk/resources?path={path} GET /disk/operations?id={id} GET, PUT, DELETE – идемпотентные. Повторяем при обрыве, не задумываясь: PUT /disk/resources?path={path} DELETE /disk/resources?path={path} POST – опасный. Изменяет состояние ресурса, повторять опасно OPTIONS – подскажет поддерживаемые ресурсом методы
  • 39. 39 HTTP-методы GET – безопасный. Делаем запрос, не задумываясь: GET /disk/resources?path={path} GET /disk/operations?id={id} GET, PUT, DELETE – идемпотентные. Повторяем при обрыве, не задумываясь: PUT /disk/resources?path={path} DELETE /disk/resources?path={path} POST – опасный. Изменяет состояние ресурса, повторять опасно OPTIONS – подскажет поддерживаемые ресурсом методы
  • 41. 41 Когда CRUD мало Копирование и Перемещение • Не идемпотентны • Не безопасны Надо использовать POST, но метод один, а операции две На помощь приходят они! Ad Hoc-методы! POST /disk/resources/ copy ? path={path}&from={from} POST /disk/resources/ move ? path={path}&from={from}
  • 42. 42 Когда CRUD мало Копирование и Перемещение • Не идемпотентны • Не безопасны Надо использовать POST, но метод один, а операции две На помощь приходят они! Ad Hoc-методы! POST /disk/resources/ copy ? path={path}&from={from} POST /disk/resources/ move ? path={path}&from={from}
  • 43. 43 Когда CRUD мало Копирование и Перемещение • Не идемпотентны • Не безопасны Надо использовать POST, но метод один, а операции две На помощь приходят они! Ad Hoc-методы! POST /disk/resources/ copy ? path={path}&from={from} POST /disk/resources/ move ? path={path}&from={from}
  • 44. 44 The Bells And Whistles RESTful API Яндекс Диска
  • 45. 45 Hypermedia API Предоставлять данные о том, что можно делать с каждым ресурсом. Hypermedia as the Engine of Application State Клиент должен взаимодействовать с сервером посредством hypermedia-контролов, получаемых от сервера. Профит Клиент не дёргает захардкоденные URL Клиент переходит по ссылкам
  • 46. 46 Hypermedia API Предоставлять данные о том, что можно делать с каждым ресурсом. Hypermedia as the Engine of Application State Клиент должен взаимодействовать с сервером посредством hypermedia-контролов, получаемых от сервера. Профит Клиент не дёргает захардкоденные URL Клиент переходит по ссылкам
  • 47. 47 Hypermedia API Предоставлять данные о том, что можно делать с каждым ресурсом. Hypermedia as the Engine of Application State Клиент должен взаимодействовать с сервером посредством hypermedia-контролов, получаемых от сервера. Профит • Клиент не дёргает захардкоденные URL • Клиент переходит по ссылкам
  • 48. 48 Hypermedia API • Collection+JSON • HAL • DocJSON • JSON API • JSON Hyperschema
  • 49. 49 Hypertext Application Language • Чрезвычайно прост • Есть draft RFC-стандарта • Уже встречается в публичных API • MIME-type: application/hal+json Благодаря HAL Клиент знает, что и как может сделать с объектом Сервер может управлять набором доступных действий
  • 50. 50 Hypertext Application Language • Чрезвычайно прост • Есть draft RFC-стандарта • Уже встречается в публичных API • MIME-type: application/hal+json Благодаря HAL • Клиент знает, что и как может сделать с объектом • Сервер может управлять набором доступных действий
  • 51. 51 Обычное API # пусть у нас есть объект папки print folder { “name”: “foo”, “path”: “disk:/foo”, “type”: “dir” } # удаляем папку URL = 'https://cloud-api.yandex.net/v1/disk/resources' query = {} query['path'] = folder['path'] query['permanently'] = True qs = urlencode(query) url = URL + '?' + qs request('DELETE', url) <Response [204]>
  • 52. 52 Hypermedia API # пусть у нас есть объект папки с HAL-ссылками print folder { "_links": { "delete": { "href": "https://cloud- api.yandex.net/v1/disk/resources?path=disk%3A%2Ffoo&permanently=True", "method": "DELETE" }, }, “name”: “foo”, “path”: “disk:/foo”, “type”: “dir” } # удаляем папку action = folder[‘_links’][‘delete’] request(action[‘method’], action[‘href’]) <Response [204]>
  • 53. 53 Self-describing & Machine-readable Машиночитаемые способы описания REST API • RAML • WADL • JSON Schema + JSON HyperSchema • Swagger • IO Docs • Apiary Blueprints
  • 54. 54 Swagger • Описывает API в виде JSON • Развивается как стандарт • Прост для понимания • Имеет экосистему инструментов
  • 55. 55 Swagger описывает • Структуру API • Параметры операций над ресурсами • Структуру возвращаемых объектов
  • 56. 56 Профит от Swagger • Универсальные Swagger-клиенты • Автогенерация частей нативных SDK • Готовый open source UI для API
  • 58. 58 Что в итоге получилось
  • 59. 59 Что в итоге получилось • Понятная и расширяемая структура Удобная навигация по API с помощью ссылок Самодокументируемость и машиночитаемость
  • 60. 60 Что в итоге получилось • Понятная и расширяемая структура • Удобная навигация по API с помощью ссылок Самодокументируемость и машиночитаемость
  • 61. 61 Что в итоге получилось • Понятная и расширяемая структура • Удобная навигация по API с помощью ссылок • Самодокументируемость и машиночитаемость
  • 63. 63 Рецепт правильного REST API • Структура в виде ресурсов и операций над ними Доступ к объектам через коллекции Старайтесь придерживаться RFC 2616 Используйте Ad Hoc-методы там где не хватает HTTP Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 64. 64 Рецепт правильного REST API • Структура в виде ресурсов и операций над ними • Доступ к объектам через коллекции Старайтесь придерживаться RFC 2616 Используйте Ad Hoc-методы там где не хватает HTTP Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 65. 65 Рецепт правильного REST API • Структура в виде ресурсов и операций над ними • Доступ к объектам через коллекции • Старайтесь придерживаться RFC 2616 Используйте Ad Hoc-методы там где не хватает HTTP Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 66. 66 Рецепт правильного REST API • Структура в виде ресурсов и операций над ними • Доступ к объектам через коллекции • Старайтесь придерживаться RFC 2616 • Используйте Ad Hoc-методы там где не хватает HTTP Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 67. 67 Рецепт правильного REST API • Структура в виде ресурсов и операций над ними • Доступ к объектам через коллекции • Старайтесь придерживаться RFC 2616 • Используйте Ad Hoc-методы там где не хватает HTTP • Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 68. 68 Рецепт правильного REST API • Структура в виде ресурсов и операций над ними • Доступ к объектам через коллекции • Старайтесь придерживаться RFC 2616 • Используйте Ad Hoc-методы там где не хватает HTTP • Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html • Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 69. 69 Для чего использовать API Диска • Работа с контентом пользователей • Синхронизация данных между устройствами • Хранение user-related данных приложений
  • 71. 71 Роман Акинфеев Разработчик back-end и REST API Яндекс.Диска Клуб разработчиков: Сервис «Полигон»: tech.yandex.ru/disk/poligon clubs.ya.ru/apidisk/