RESTful архитектура для масштабируемых систем Сергей Скворцов $Revision::   30   $ 2008-10-06
Содержание <ul><li>REST –  введение </li></ul><ul><li>REST –  масштабируемость </li></ul><ul><li>REST   –  нюансы и тонкос...
I .   REST  –  что это?
Re presentational  S tate  T ransfer <ul><li>REST –  это архитектурный стиль </li></ul><ul><li>Ключевые понятия:  </li></u...
REST:  история <ul><li>Roy Fielding - один из авторов  HTTP </li></ul><ul><li>« Designing the Web Architecture: Problems a...
REST:  стиль <ul><li>Identifiable resources </li></ul><ul><li>Uniform interface </li></ul><ul><li>Stateless  – отсутствие ...
Вот это НЕ  REST : <ul><li>Remote Procedure Call   ( RPC) </li></ul><ul><ul><li>XML-RPC, JSON-RPC </li></ul></ul><ul><ul><...
Web Service s  –  два мира <ul><li>Programmable Web :  клиенты это  программы </li></ul><ul><ul><li>API - Web Service Prot...
Resource  is… <ul><li>Ресурс– это объект высшего порядка </li></ul><ul><ul><li>Объект ,  сущность  – частные случаи  ресур...
Resource   - термины <ul><li>Ресурс  – это концепция </li></ul><ul><li>URI  –  идентификатор ресурса </li></ul><ul><ul><li...
State  is… <ul><li>Resource State </li></ul><ul><ul><li>это  значение  ресурса </li></ul></ul><ul><li>Application State </...
State  и   Transfer   в  RE ST <ul><li>Это  Application State </li></ul><ul><li>Состояние  ( State )  есть часть сообщения...
REST:  дизайн <ul><li>Фиксированное число  глаголов </li></ul><ul><ul><li>Методы : POST, GET, PUT, DELETE;  HEAD </li></ul...
Примеры  ресурсов <ul><li>Ресурс для  объекта </li></ul><ul><ul><li>/papers/ HL2008-RESTful-Architechture.ppt </li></ul></...
Пример  операций <ul><li>Список пользователей : </li></ul><ul><ul><li>GET /users </li></ul></ul><ul><li>Создать пользовате...
REST vs.  SOAP POST   /generic_message_handler C ontent-type :  application/SOAP+XML <soap:envelope> <soap:body> <submit-p...
REST  vs. SOAP POST  /purchase_orders  HTTP/1.1 Host:  accounting.mycompany.com C ontent-type:   application/purchase-orde...
REST  vs.  WS-* <ul><li>SOAP WS-* </li></ul><ul><ul><li>Сложно ! </li></ul></ul><ul><ul><li>Повторение истории  CORBA </li...
Протокол  HTTP <ul><li>Это протокол уровня  приложений  ( application) </li></ul><ul><ul><li>REST </li></ul></ul><ul><li>…...
Примеры  REST API <ul><li>HTTP   ( да-да!) </li></ul><ul><li>Atom Application Protocol (APP,  RFC 5023 ) </li></ul><ul><ul...
II .   Масштабируемость и  RESTful  style
REST:  атрибуты качества <ul><li>Готовность  (Availability) </li></ul><ul><li>Производительность  (Performance) </li></ul>...
Layers isolation <ul><li>Логическое разделение на уровни </li></ul><ul><li>Схожий   API  для людей и машин </li></ul><ul><...
URIs   вместо одной точки входа ( RPC) <ul><li>Нет нужды анализировать  тело  запроса, чтобы понять что с ним делать </li>...
Web   - распределёная система <ul><li>Данные </li></ul><ul><ul><li>Ресурсы, идентификаторы, представления </li></ul></ul><...
Кэширование <ul><li>Кэширование на стороне  клиента  (в браузере, в кэше приложения) </li></ul><ul><li>Кэширование на уров...
Отсутствие состояния <ul><li>Легко достигается  горизонтальная  масштабируемость серверов: </li></ul><ul><ul><li>за счёт  ...
III .   REST  –  прочее
REST  и  web frameworks <ul><li>Catalyst / Perl :  Catalyst-Action-REST </li></ul><ul><li>RubyOnRails  – c  версии 2.0 </l...
Критерии хорошего  REST API <ul><li>Addressability </li></ul><ul><ul><li>Все ресурсы и состояние клиента адресуемы </li></...
HTML 5   и  REST <form id=&quot;createUser&quot;  method =&quot; PUT &quot;  template =&quot; /user/{username} &quot;> <la...
REST  и  AJAX <ul><li>AJAX –  это клиент/приложение для  Programmable Web ,  запускаемое внутри браузера </li></ul><ul><li...
Кошерны ли  cookies ? <ul><li>Stateful :  cookie  есть  ссылка  на сессию, которая хранится на сервере </li></ul><ul><ul><...
Нужен ли  WADL ? <ul><li>Web Application Description Language </li></ul><ul><li>CORBA – IDL </li></ul><ul><li>WS-* - WSDL ...
REST – Unix Way <ul><li>Command line  ↔  URL  (arguments  ↔  query string) </li></ul><ul><li>Filesystem  ↔  URL </li></ul>...
Вопросы? ( по теме доклада) Сергей Скворцов skv@ protey .ru
Библиография <ul><li>http://www.google.ru/search?q=re st </li></ul><ul><li>http://delicious.com/search?p=rest </li></ul><u...
Upcoming SlideShare
Loading in...5
×

RESTful Architechture (Highload++ 2008)

649

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
649
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

RESTful Architechture (Highload++ 2008)

  1. 1. RESTful архитектура для масштабируемых систем Сергей Скворцов $Revision:: 30 $ 2008-10-06
  2. 2. Содержание <ul><li>REST – введение </li></ul><ul><li>REST – масштабируемость </li></ul><ul><li>REST – нюансы и тонкости </li></ul>
  3. 3. I . REST – что это?
  4. 4. Re presentational S tate T ransfer <ul><li>REST – это архитектурный стиль </li></ul><ul><li>Ключевые понятия: </li></ul><ul><ul><li>Ресурс - Resource </li></ul></ul><ul><ul><li>Представление - Representation </li></ul></ul><ul><ul><li>Состояние - State </li></ul></ul><ul><ul><li>Перенос состояния – Transfer </li></ul></ul>
  5. 5. REST: история <ul><li>Roy Fielding - один из авторов HTTP </li></ul><ul><li>« Designing the Web Architecture: Problems and Insights » - его докторская диссертация </li></ul><ul><ul><li>Стоит прочесть! </li></ul></ul><ul><li>REST есть post hoc описания Web как такового </li></ul><ul><li>HTTP 1.1 (RFC 2616) был обновлён под REST </li></ul>
  6. 6. REST: стиль <ul><li>Identifiable resources </li></ul><ul><li>Uniform interface </li></ul><ul><li>Stateless – отсутствие (application) состояния на сервере </li></ul><ul><li>Cached – кэширование </li></ul><ul><li>Layers – разделение на уровни </li></ul>
  7. 7. Вот это НЕ REST : <ul><li>Remote Procedure Call ( RPC) </li></ul><ul><ul><li>XML-RPC, JSON-RPC </li></ul></ul><ul><ul><li>SOAP: WS-*, WSDL, … </li></ul></ul><ul><li>Stateful системы / протоколы </li></ul><ul><ul><li>Пример: FTP </li></ul></ul><ul><li>Message passing / Instant Messaging </li></ul>
  8. 8. Web Service s – два мира <ul><li>Programmable Web : клиенты это программы </li></ul><ul><ul><li>API - Web Service Protocols </li></ul></ul><ul><ul><li>Ресурсы – machine-readable </li></ul></ul><ul><li>Human Web : клиенты это люди </li></ul><ul><ul><li>Сайт - Web Application </li></ul></ul><ul><ul><li>Ресурсы – human-readable </li></ul></ul><ul><li>REST используется в обоих типах WS </li></ul><ul><li>RPC – только для Programmable Web </li></ul>
  9. 9. Resource is… <ul><li>Ресурс– это объект высшего порядка </li></ul><ul><ul><li>Объект , сущность – частные случаи ресурса </li></ul></ul><ul><li>Ресурс – это суть, концепция , представление - его форма </li></ul><ul><li>Значение ресурса – его состояние (содержание) </li></ul><ul><li>Ресурс можно увидеть и изменить только через его представление ( HTML, XML, PDF,… ) </li></ul>
  10. 10. Resource - термины <ul><li>Ресурс – это концепция </li></ul><ul><li>URI – идентификатор ресурса </li></ul><ul><ul><li>Т.е. уникальный и URIs сравниваемые между собой </li></ul></ul><ul><ul><li>У одного ресурса может быть несколько URIs </li></ul></ul><ul><li>Представление – HTML, XML, PNG, … </li></ul><ul><li>Метаданные представления – media type, last-modified time, … </li></ul>
  11. 11. State is… <ul><li>Resource State </li></ul><ul><ul><li>это значение ресурса </li></ul></ul><ul><li>Application State </li></ul><ul><ul><li>Это состояние сессии </li></ul></ul><ul><ul><li>В REST сессии хранятся только на клиенте </li></ul></ul><ul><ul><li>Hypertext – это application state engine </li></ul></ul>
  12. 12. State и Transfer в RE ST <ul><li>Это Application State </li></ul><ul><li>Состояние ( State ) есть часть сообщения, передаваемого ( Transfer ) от сервера к клиента, и обратно к серверу </li></ul><ul><li>Т.о. любой сервер, получив состояние, может продолжить транзакцию с верной точки </li></ul>
  13. 13. REST: дизайн <ul><li>Фиксированное число глаголов </li></ul><ul><ul><li>Методы : POST, GET, PUT, DELETE; HEAD </li></ul></ul><ul><ul><li>CRUD : Create, Retrieve, Update, Delete </li></ul></ul><ul><ul><li>SQL : INSERT, SELECT, UPDATE, DELETE </li></ul></ul><ul><li>Бесконечное число существительных </li></ul><ul><ul><li>Ресурсы , ресурсы , ресурсы! </li></ul></ul>
  14. 14. Примеры ресурсов <ul><li>Ресурс для объекта </li></ul><ul><ul><li>/papers/ HL2008-RESTful-Architechture.ppt </li></ul></ul><ul><li>Ресурс как запрос </li></ul><ul><ul><li>/orders/by-state/open </li></ul></ul><ul><ul><li>/search?q=HighLoad </li></ul></ul><ul><li>Ресурс как алгоритмический запрос </li></ul><ul><ul><li>/prime-numbers?from=37&size=5 </li></ul></ul>
  15. 15. Пример операций <ul><li>Список пользователей : </li></ul><ul><ul><li>GET /users </li></ul></ul><ul><li>Создать пользователя : </li></ul><ul><ul><li>POST /users </li></ul></ul><ul><li>Получить данные о пользователе : </li></ul><ul><ul><li>GET /users/ [ID] </li></ul></ul><ul><li>PUT, DELETE, … </li></ul>
  16. 16. REST vs. SOAP POST /generic_message_handler C ontent-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> Это сокращённый вариант!
  17. 17. REST vs. SOAP POST /purchase_orders HTTP/1.1 Host: accounting.mycompany.com C ontent-type: application/purchase-order+xml <po>...</po> Всё!
  18. 18. REST vs. WS-* <ul><li>SOAP WS-* </li></ul><ul><ul><li>Сложно ! </li></ul></ul><ul><ul><li>Повторение истории CORBA </li></ul></ul><ul><li>REST – это просто ! </li></ul><ul><li>HTTP – вечен! </li></ul>
  19. 19. Протокол HTTP <ul><li>Это протокол уровня приложений ( application) </li></ul><ul><ul><li>REST </li></ul></ul><ul><li>… а не транспортный протокол </li></ul><ul><ul><li>Как его трактует SOAP </li></ul></ul>
  20. 20. Примеры REST API <ul><li>HTTP ( да-да!) </li></ul><ul><li>Atom Application Protocol (APP, RFC 5023 ) </li></ul><ul><ul><li>OpenSearch, GData </li></ul></ul><ul><li>Google: Search, OpenSocial, Feeds, … </li></ul><ul><li>Amazon : eCommerce , S3 , … </li></ul><ul><li>Yahoo!: почти все API </li></ul><ul><ul><li>Delicious, Flickr, … </li></ul></ul>Ваше API?
  21. 21. II . Масштабируемость и RESTful style
  22. 22. REST: атрибуты качества <ul><li>Готовность (Availability) </li></ul><ul><li>Производительность (Performance) </li></ul><ul><li>Модифицируемость (Modifiability) </li></ul><ul><li>Безопасность (Security) </li></ul><ul><li>Сопровождаемость (Maintainability) </li></ul><ul><li>Тестируемость ( Testability) </li></ul><ul><li>Концептуальная целостность (Conceptual integrity) </li></ul>
  23. 23. Layers isolation <ul><li>Логическое разделение на уровни </li></ul><ul><li>Схожий API для людей и машин </li></ul><ul><li>Общий базис в виде frameworks </li></ul>
  24. 24. URIs вместо одной точки входа ( RPC) <ul><li>Нет нужды анализировать тело запроса, чтобы понять что с ним делать </li></ul><ul><li>Балансируется просто по кускам URI: </li></ul><ul><ul><li>/users/ - на backends_1 </li></ul></ul><ul><ul><li>/orders/ - на backends_2 </li></ul></ul><ul><ul><li>/users/ [ID] /profile – sharding на уровне [ID] </li></ul></ul><ul><li>В URI не обязательно должен быть смысл – но это часто удобно – в виде правил именования. </li></ul><ul><ul><li>Cool URIs don’t change! </li></ul></ul>
  25. 25. Web - распределёная система <ul><li>Данные </li></ul><ul><ul><li>Ресурсы, идентификаторы, представления </li></ul></ul><ul><li>Компоненты (components) </li></ul><ul><ul><li>Origin servers (ex: Apache), Gateways (ex.: Squid), Proxies (ex: firewalls), User Agents (ex: Firefox) </li></ul></ul><ul><li>Соединители ( connectors) </li></ul><ul><ul><li>Clients, Servers, Caches, Resolvers, Tunnels </li></ul></ul>RFC 2616
  26. 26. Кэширование <ul><li>Кэширование на стороне клиента (в браузере, в кэше приложения) </li></ul><ul><li>Кэширование на уровне intermediaries ( прокси) </li></ul><ul><ul><li>Полное использование архитектуры Web </li></ul></ul><ul><li>Как итог: меньше запросов/трафика на ваши сервера </li></ul><ul><li>Надо лишь выдавать корректные HTTP- заголовки : Last-Modified; ETag; Expires; Cache-Control </li></ul>
  27. 27. Отсутствие состояния <ul><li>Легко достигается горизонтальная масштабируемость серверов: </li></ul><ul><ul><li>за счёт отсутствия состояния клиента на сервере (нет session affinity) </li></ul></ul><ul><ul><li>Stateless – это лучший load balancing </li></ul></ul><ul><ul><li>Loose coupling </li></ul></ul>
  28. 28. III . REST – прочее
  29. 29. REST и web frameworks <ul><li>Catalyst / Perl : Catalyst-Action-REST </li></ul><ul><li>RubyOnRails – c версии 2.0 </li></ul><ul><li>Python : django-rest-interface </li></ul><ul><li>Java : Restlet, Spring MVC </li></ul><ul><li>ASP.NET 2.0 </li></ul><ul><li>и так далее </li></ul>
  30. 30. Критерии хорошего REST API <ul><li>Addressability </li></ul><ul><ul><li>Все ресурсы и состояние клиента адресуемы </li></ul></ul><ul><li>Statelessness </li></ul><ul><li>Connectedness </li></ul><ul><ul><li>Ссылки на другие ресурсы – в представлении ресурсы </li></ul></ul><ul><li>Uniform interface </li></ul><ul><ul><li>Только стандартные HTTP методы – без расширения и сужения </li></ul></ul>
  31. 31. HTML 5 и REST <form id=&quot;createUser&quot; method =&quot; PUT &quot; template =&quot; /user/{username} &quot;> <label>Username:</label> <input type=&quot;text&quot; name=&quot;username&quot; /> PUT здесь – аналог REPLACE в SQL В method может быть и DELETE
  32. 32. REST и AJAX <ul><li>AJAX – это клиент/приложение для Programmable Web , запускаемое внутри браузера </li></ul><ul><li>Поэтому хороший API – особо важен (особенно кэшируемость ответов) </li></ul><ul><li>Иногда AJAX рушит addressability – этого надо избегать ( см. Gmail ) </li></ul>
  33. 33. Кошерны ли cookies ? <ul><li>Stateful : cookie есть ссылка на сессию, которая хранится на сервере </li></ul><ul><ul><li>Ужасно! Проблема session affinity . </li></ul></ul><ul><li>Stateless : cookie содержит значение сессии </li></ul><ul><ul><li>Ещё лучше, если состояние клиента определяется лишь по URI и Representation </li></ul></ul>
  34. 34. Нужен ли WADL ? <ul><li>Web Application Description Language </li></ul><ul><li>CORBA – IDL </li></ul><ul><li>WS-* - WSDL </li></ul><ul><li>REST - ?? ? </li></ul><ul><ul><li>Нет, ничего не надо! </li></ul></ul>
  35. 35. REST – Unix Way <ul><li>Command line ↔ URL (arguments ↔ query string) </li></ul><ul><li>Filesystem ↔ URL </li></ul><ul><li>«Всё есть файл» ↔ «Всё есть ресурс» </li></ul><ul><li>Pipeline + tools ↔ components + intermediates </li></ul><ul><li>Набор общих, простых и стройных концепций </li></ul>
  36. 36. Вопросы? ( по теме доклада) Сергей Скворцов skv@ protey .ru
  37. 37. Библиография <ul><li>http://www.google.ru/search?q=re st </li></ul><ul><li>http://delicious.com/search?p=rest </li></ul><ul><li>http ://en.wikipedia.org/wiki/Representational_State_Transfer </li></ul><ul><li>http://oreilly.com/catalog/9780596529260/ </li></ul><ul><li>http://home.ccil.org/~cowan/restws.pdf </li></ul><ul><li>http://www.slideshare.net/dullhunk/if-web-services-are-the-answer-whats-the-question/ </li></ul><ul><li>…… </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×