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

More Related Content

PDF
Простой способ мультиплатформенной синхронизации, Алёна Паньшина
PDF
Видео + Конференция. Возможности решений TrueConf. Стас Солдатов
PPTX
Инструменты и лайфхаки тестирования REST API
PDF
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
PDF
Разработка RESTful api with all bells and whistles
PPTX
RESTful API: Best practices, versioning, design documentation
PPTX
ITmozg, Даниил Павлючков
Простой способ мультиплатформенной синхронизации, Алёна Паньшина
Видео + Конференция. Возможности решений TrueConf. Стас Солдатов
Инструменты и лайфхаки тестирования REST API
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
Разработка RESTful api with all bells and whistles
RESTful API: Best practices, versioning, design documentation
ITmozg, Даниил Павлючков

Similar to разработка RESTful api with all bells and whistles (20)

PDF
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
PDF
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
PPTX
Impress Application Server for node.js (ru)
PDF
Разработка мобильного и веб интерфейса для Caché
PDF
RESTful API development with Symfony2
PDF
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PPTX
ASP.NET Web API
PDF
Web and mobile development for intersystems caché, Eduard Lebedyuk
PPT
RESTful Architechture (Highload++ 2008)
PPT
!2hl++2008 Restful Architechture
PPTX
Stas Sultanov "REST again? Oh, come on!"
PDF
Легкий обмен данными с пользователем
PDF
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
PPTX
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
PDF
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
PPTX
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
PPT
PDF
Программируемость корпоративной сети с Cisco APIC-EM
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Impress Application Server for node.js (ru)
Разработка мобильного и веб интерфейса для Caché
RESTful API development with Symfony2
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
ASP.NET Web API
Web and mobile development for intersystems caché, Eduard Lebedyuk
RESTful Architechture (Highload++ 2008)
!2hl++2008 Restful Architechture
Stas Sultanov "REST again? Oh, come on!"
Легкий обмен данными с пользователем
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Программируемость корпоративной сети с Cisco APIC-EM
Ad

More from Yandex (20)

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

разработка 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 Yandex Disk APIs WebDAV Для работы с Диском, как с файловой системой RESTful API Для работы с Диском там, где WebDAV’а мало
  • 5. 5 Задачи Простота изучения возможностей API Легко расширяемая функциональность Простота разработки под API
  • 6. 6 RESTful API Яндекс Диска Понятная и логичная структура Hypermedia API Self-descriptive & Machine-readable API
  • 7. 7 Что такое REST?  Просто набор принципов  Никаких готовых решений
  • 8. 8 Клиент-сервер и интерфейс Клиент и сервер знают интерфейс Клиент и сервер не знают друг друга Профит Много клиентов хороших и разных Сервер не замечает, как обновляются клиенты Клиенты не замечают, как обновляется сервер
  • 9. 9 Stateless Сервер не хранит никакой информации о состоянии клиента между запросами Нет соединений Нет сессий Нет истории операций клиента Профит Бэкэнд легко масштабируется Клиент не беспокоится ни о чём между запросами
  • 10. 10 Кэшируемость и многослойность Сервер сообщает, что и как кэшировать Клиент может не соединяться напрямую с сервером Профит Возможность снизить нагрузку на бэкэнд Возможность работать с кэшем на клиенте
  • 12. 12 Ресурсы Система оперирует ресурсами Ресурсы имеют чёткую структуру URL – уникальный идентификатор ресурса Ресурсы API Диска: Файлы и папки – resources Асинхронные операции – operations
  • 13. 13 URL ресурсов URL группируются в нэймспэйсы /disk URL коллекции ресурсов всегда во множественном числе /disk / resources /disk / operations URL коллекции + идентификатор = URL ресурса /disk / resources ? path={path} /disk / operations ? id={id} /pets / kittens / {name}
  • 15. 15 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 – подскажет поддерживаемые ресурсом методы
  • 16. 16 Когда CRUD мало Копирование и Перемещение  Не идемпотентны Не безопасны Надо использовать POST, но метод один и ресурс один На помощь приходят Ad Hoc-методы! POST /disk/resources/ copy ? path={path}&from={from} POST /disk/resources/ move ? path={path}&from={from}
  • 17. 17 The Bells And Whistles RESTful API Яндекс Диска
  • 18. 18 Hypermedia API Hypermedia as the Engine of Application State Клиент должен взаимодействовать с сервером посредством гипермедиа-контролов, получаемых от сервера. Hypermedia-контролы Гиперссылки Формы (не HTML формы ;) Профит Клиент не дёргает захардкоденные URL Клиент переходит по ссылкам
  • 19. 19 Hypermedia API  Collection+JSON  HAL  DocJSON  JSON API  JSON Hyperschema  HTML
  • 20. 20 Hypertext Application Language Есть draft RFC-стандарта Чрезвычайно прост Уже встречается в публичных API MIME-type: application/hal+json Благодаря HAL Клиент знает, что и как может сделать с объектом Сервер может управлять набором доступных действий
  • 21. 21 Обычное API # пусть у нас есть объект папки print folder { “name”: “foo”, “path”: “disk:/foo”, “type”: “dir” } # удаляем папку URL = 'https://cloud-api.yandex.net/v1/disk/resources' query = {} query['path'] = o['path'] query['permanently'] = True qs = urlencode(query) url = URL + '?' + qs request('DELETE', url) <Response [204]>
  • 22. 22 Hypermedia API # пусть у нас есть объект папки с HAL-ссылками folder = request(o[‘method’], o[‘href’]).json() 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 = o[‘_links’][‘delete’] request(action[‘method’], action[‘href’]) <Response [204]>
  • 23. 23 Self-describing & Machine-readable Машиночитаемые способы описания REST API RAML WADL JSON Schema + JSON HyperSchema Swagger IO Docs Apiary Blueprints
  • 24. 24 Swagger Описывает API в виде JSON Развивается как стандарт Прост для понимания Имеет экосистему инструментов
  • 25. 25 Профит от Swagger Автогенерация частей нативных SDK Универсальные Swagger-клиенты Готовый open source UI для API
  • 28. 28 Что в итоге получилось Простая расширяемая структура Удобная навигация по API с помощью ссылок Самодокументируемость и машиночитаемость
  • 29. 29 Рецепт здорового API Структура в виде ресурсов и операций над ними Доступ к объектам через коллекции Старайтесь придерживаться RFC 2616 Используйте Ad Hoc-методы там где не хватает HTTP Добавляйте в API hypermedia-контролы HAL – http://stateless.co/hal_specification.html Описывайте API с помощью машиночитаемых форматов Swagger – https://helloreverb.com/developers/swagger
  • 30. 30 Для чего использовать API Диска Работа с контентом пользователей Синхронизация данных между устройствами Хранение user-related данных приложений
  • 32. 32 Роман Акинфеев Разработчик back-end и REST API Яндекс.Диска Клуб разработчиков: http://clubs.ya.ru/apidisk/ Сервис «Полигон»: api.yandex.ru/disk/polygon

Editor's Notes

  • #3: Добавить новую иконку!!!
  • #4: более
  • #5: Булиты однообразные: большие буквы без точек
  • #8: булиты
  • #12: иконка
  • #24: Заголовки перед булитами