!2hl++2008 restful architechture

37
1 RESTful архитектура для масштабируемых систем Сергей Скворцов $Revision:: 30 $ 2008-10-06

Upload: ontico

Post on 08-Jul-2015

2.084 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: !2hl++2008 Restful Architechture

1

RESTful архитектурадля масштабируемых систем

Сергей Скворцов

$Revision:: 30 $2008-10-06

Page 2: !2hl++2008 Restful Architechture

2

Содержание

• REST – введение

• REST – масштабируемость

• REST – нюансы и тонкости

Page 3: !2hl++2008 Restful Architechture

I. REST – что это?

Page 4: !2hl++2008 Restful Architechture

4

Representational State Transfer• REST – это архитектурный стиль• Ключевые понятия:

– Ресурс - Resource– Представление - Representation– Состояние - State– Перенос состояния – Transfer

Page 5: !2hl++2008 Restful Architechture

5

REST: история• Roy Fielding - один из авторов HTTP

• «Designing the Web Architecture: Problems and Insights» - его докторская диссертация– Стоит прочесть!

• REST есть post hoc описания Web как такового

• HTTP 1.1 (RFC 2616) был обновлён под REST

Page 6: !2hl++2008 Restful Architechture

6

REST: стиль• Identifiable resources• Uniform interface• Stateless – отсутствие (application)

состояния на сервере• Cached – кэширование• Layers – разделение на уровни

Page 7: !2hl++2008 Restful Architechture

7

Вот это НЕ REST:• Remote Procedure Call (RPC)

– XML-RPC, JSON-RPC– SOAP: WS-*, WSDL, …

• Stateful системы/протоколы– Пример: FTP

• Message passing / Instant Messaging

Page 8: !2hl++2008 Restful Architechture

8

Web Services – два мира

• Programmable Web: клиенты это программы– API - Web Service Protocols– Ресурсы – machine-readable

• Human Web: клиенты это люди– Сайт - Web Application– Ресурсы – human-readable

• REST используется в обоих типах WS• RPC – только для Programmable Web

Page 9: !2hl++2008 Restful Architechture

9

Resource is…• Ресурс– это объект высшего порядка

– Объект, сущность – частные случаи ресурса

• Ресурс – это суть, концепция,представление - его форма

• Значение ресурса – его состояние (содержание)• Ресурс можно увидеть и изменить только через

его представление (HTML, XML, PDF,…)

Page 10: !2hl++2008 Restful Architechture

10

Resource - термины

• Ресурс – это концепция• URI – идентификатор ресурса

– Т.е. уникальный и URIs сравниваемые между собой– У одного ресурса может быть несколько URIs

• Представление – HTML, XML, PNG, …• Метаданные представления – media type, last-

modified time, …

Page 11: !2hl++2008 Restful Architechture

11

State is…• Resource State

– это значение ресурса

• Application State– Это состояние сессии– В REST сессии хранятся только на

клиенте– Hypertext – это application state engine

Page 12: !2hl++2008 Restful Architechture

12

State и Transfer в REST• Это Application State• Состояние (State) есть часть сообщения,

передаваемого (Transfer) от сервера к клиента, и обратно к серверу

• Т.о. любой сервер, получив состояние, может продолжить транзакцию с верной точки

Page 13: !2hl++2008 Restful Architechture

13

REST: дизайн• Фиксированное число глаголов

– Методы: POST, GET, PUT, DELETE; HEAD– CRUD: Create, Retrieve, Update, Delete– SQL: INSERT, SELECT, UPDATE, DELETE

• Бесконечное число существительных– Ресурсы, ресурсы, ресурсы!

Page 14: !2hl++2008 Restful Architechture

14

Примеры ресурсов• Ресурс для объекта

– /papers/HL2008-RESTful-Architechture.ppt

• Ресурс как запрос– /orders/by-state/open– /search?q=HighLoad

• Ресурс как алгоритмический запрос– /prime-numbers?from=37&size=5

Page 15: !2hl++2008 Restful Architechture

15

Пример операций• Список пользователей:

– GET /users

• Создать пользователя:– POST /users

• Получить данные о пользователе:– GET /users/[ID]

• PUT, DELETE, …

Page 16: !2hl++2008 Restful Architechture

16

REST vs. SOAPPOST /generic_message_handlerContent-type: application/SOAP+XML

<soap:envelope><soap:body> <submit-purchase-order> <destination>accounting.mycompany.com</destination> <po>...</po> </submit-purchase-order></soap:body><soap:envelope>

Это сокращённый вариант!

Page 17: !2hl++2008 Restful Architechture

17

REST vs. SOAPPOST /purchase_orders HTTP/1.1Host: accounting.mycompany.comContent-type: application/purchase-order+xml

<po>...</po>

Всё!

Page 18: !2hl++2008 Restful Architechture

18

REST vs. WS-*

• SOAP WS-*– Сложно!– Повторение

истории CORBA

• REST – это просто!

• HTTP – вечен!

Page 19: !2hl++2008 Restful Architechture

19

Протокол HTTP• Это протокол уровня приложений

(application)– REST

• …а не транспортный протокол– Как его трактует SOAP

Page 20: !2hl++2008 Restful Architechture

20

Примеры REST API• HTTP (да-да!)• Atom Application Protocol (APP, RFC 5023)

– OpenSearch, GData

• Google: Search, OpenSocial, Feeds, …• Amazon: eCommerce, S3, …• Yahoo!: почти все API

– Delicious, Flickr, … Ваше API?

Page 21: !2hl++2008 Restful Architechture

II. Масштабируемость и RESTful style

Page 22: !2hl++2008 Restful Architechture

22

REST: атрибуты качества• Готовность (Availability)• Производительность (Performance)• Модифицируемость (Modifiability)• Безопасность (Security)• Сопровождаемость (Maintainability)• Тестируемость (Testability)• Концептуальная целостность (Conceptual integrity)

Page 23: !2hl++2008 Restful Architechture

23

Layers isolation

Frontend

App Backend

Database

Frontend

REST API Backend

App DB

Web App Backend

Sessions, ...

• Логическое разделение на уровни

• Схожий API для людей и машин

• Общий базис в виде frameworks

Page 24: !2hl++2008 Restful Architechture

24

URIs вместо одной точки входа (RPC)

• Нет нужды анализировать тело запроса, чтобы понять что с ним делать

• Балансируется просто по кускам URI:– /users/ - на backends_1– /orders/ - на backends_2– /users/[ID]/profile – sharding на уровне [ID]

• В URI не обязательно должен быть смысл – но это часто удобно – в виде правил именования.– Cool URIs don’t change!

Page 25: !2hl++2008 Restful Architechture

25

Web - распределёная система• Данные

– Ресурсы, идентификаторы, представления

• Компоненты (components)– Origin servers (ex: Apache), Gateways (ex.: Squid),

Proxies (ex: firewalls), User Agents (ex: Firefox)

• Соединители (connectors)– Clients, Servers, Caches, Resolvers, Tunnels

RFC 2616

Page 26: !2hl++2008 Restful Architechture

26

Кэширование• Кэширование на стороне клиента (в браузере, в

кэше приложения)• Кэширование на уровне intermediaries (прокси)

– Полное использование архитектуры Web

• Как итог: меньше запросов/трафика на ваши сервера

• Надо лишь выдавать корректные HTTP-заголовки: Last-Modified; ETag; Expires; Cache-Control

Page 27: !2hl++2008 Restful Architechture

27

Отсутствие состояния• Легко достигается горизонтальная

масштабируемость серверов:– за счёт отсутствия состояния клиента на

сервере (нет session affinity)– Stateless – это лучший load balancing– Loose coupling

Page 28: !2hl++2008 Restful Architechture

III. REST – прочее

Page 29: !2hl++2008 Restful Architechture

29

REST и web frameworks

• Catalyst/Perl: Catalyst-Action-REST• RubyOnRails – c версии 2.0• Python: django-rest-interface• Java: Restlet, Spring MVC • ASP.NET 2.0• и так далее

Page 30: !2hl++2008 Restful Architechture

30

Критерии хорошего REST API• Addressability

– Все ресурсы и состояние клиента адресуемы• Statelessness• Connectedness

– Ссылки на другие ресурсы – в представлении ресурсы

• Uniform interface– Только стандартные HTTP методы – без

расширения и сужения

Page 31: !2hl++2008 Restful Architechture

31

HTML 5 и REST<form id="createUser" method="PUT" template="/user/{username}">

<label>Username:</label><input type="text" name="username" />

PUT здесь – аналог REPLACE в SQL

В method может быть и DELETE

Page 32: !2hl++2008 Restful Architechture

32

REST и AJAX• AJAX – это клиент/приложение для

Programmable Web, запускаемое внутри браузера

• Поэтому хороший API – особо важен (особенно кэшируемость ответов)

• Иногда AJAX рушит addressability – этого надо избегать (см. Gmail)

Page 33: !2hl++2008 Restful Architechture

33

Кошерны ли cookies?• Stateful: cookie есть ссылка на сессию,

которая хранится на сервере– Ужасно! Проблема session affinity.

• Stateless: cookie содержит значение сессии– Ещё лучше, если состояние клиента

определяется лишь по URI и Representation

Page 34: !2hl++2008 Restful Architechture

34

Нужен ли WADL?• Web Application Description Language

• CORBA – IDL

• WS-* - WSDL

• REST - ???– Нет, ничего не надо!

Page 35: !2hl++2008 Restful Architechture

35

REST – Unix Way

• Command line ↔ URL (arguments ↔ query string)

• Filesystem ↔ URL• «Всё есть файл» ↔ «Всё есть ресурс»• Pipeline + tools ↔ components + intermediates• Набор общих, простых и стройных концепций

Page 36: !2hl++2008 Restful Architechture

36

Сергей Скворцов[email protected]

Вопросы?(по теме доклада)

Page 37: !2hl++2008 Restful Architechture

37

Библиография• http://www.google.ru/search?q=rest• http://delicious.com/search?p=rest• http

://en.wikipedia.org/wiki/Representational_State_Transfer• http://oreilly.com/catalog/9780596529260/• http://home.ccil.org/~cowan/restws.pdf• http://www.slideshare.net/dullhunk/if-web-services-are-the-answer-whats-the-question/• ……