Your SlideShare is downloading. ×
0
REST
В исполнении:  • Denis Udod  • java developer  • C.T.CO
В исполнении:  • Denis Udod  • java developer  • C.T.CO
В исполнении:  • Denis Udod  • java developer  • C.T.CO
• Опыт – есть
• Опыт – есть – иногда получалось
• Опыт – есть – иногда получалось – реже получалось хорошо
Disclaimer• Я не проповедую истину• Я могу ошибаться• Я могу быть “капитаном очевидность”
RESTЛегкость бытия
• REST тут, REST там• REST спасет мир• Вы еще пользуетесь “мылом” тогда  REST идет к вам!
Зачем нам это?• Ведь есть  – XML-RPC  – SOAP
Зачем нам это?• Ведь есть  – XML-RPC  – SOAP  – CORBA*
Зачем нам это?• Ведь есть  – XML-RPC  – SOAP  – CORBA*  * for dinosaurs only
Зачем нам это?• Ведь есть  – XML-RPC  – SOAP  – CORBA• Зачем нам еще одна серебрянная пуля  в нашей обойме?
• Велосипеды?
• Нам не нужны ваши велосипеды
• Нам не нужны ваши велосипеды• Мы хотим проверенные, современные  решения
А в результате?
В результате
В результате
В результате
REST?• Как нам от него станет легче?
REST?• Как нам от него станет легче?• Может это новая модная «фенечка»?
REST - что это?
REST – это НЕ...
REST – это НЕ...• REST - не протокол• REST - не стандарт• REST - не эксклюзивное предложение
REST – это НЕ...• REST - не протокол• REST - не стандарт• REST - не эксклюзивное предложение• REST - не “серебрянная” пуля
REST - что это?• REST - архитектрурный стиль• RESТ – подход• REST – философия
REST• «Не изобретайте велосипед»• «Все уже украдено до нас»
REST• Используйте то, что уже есть в WEB• Используйте то, что уже давно работает
REST• Как он это предлагает делать?
Вернемся к началу• Что было раньше курица или яйцо?
В начале был HTTP ?• RFC2616
HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя  компьютерами (клиентом и сервером)• Построенно...
HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя  компьютерами (клиентом и сервером)• Построенно...
HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя  компьютерами (клиентом и сервером)• Построенно...
HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя  компьютерами (клиентом и сервером)• Построенно...
HTTP пример• GET /index.html HTTP/1.1  Host: www.jug.lv  User-Agent: Mozilla/5.0  Accept: text/html  Connection: close• HT...
Ресурсы• GET /index.html HTTP/1.1  Host: www.jug.lv  User-Agent: Mozilla/5.0  Accept: text/html  Connection: close URI Uni...
Методы• GET /index.html HTTP/1.1  Host: www.jug.lv  User-Agent: Mozilla/5.0  Accept: text/html  Connection: close GET, POS...
Мета-информация• GET /index.html HTTP/1.1  Host: www.jug.lv  User-Agent: Mozilla/5.0  Accept: text/html  Connection: close...
А что в ответе?• HTTP/1.0 200 OK  Server: nginx/0.6  Content-Language: en  Content-Type: text/html; charset=utf-8  Content...
А что в ответе?• HTTP/1.0 200 OK  Server: nginx/0.6  Content-Language: en  Content-Type: text/html; charset=utf-8  Content...
А что в ответе?• HTTP/1.0 200 OK  Server: nginx/0.6  Content-Language: en  Content-Type: text/html; charset=utf-8  Content...
А что в ответе?• HTTP/1.0 200 OK  Server: nginx/0.6  Content-Language: en  Content-Type: text/html; charset=utf-8  Content...
HTTP• Все что надо в одном флаконе
HTTP• Все что надо в одном флаконе• Cоздавался как каноническая  реализация REST-принципов
HTTP• Все что надо в одном флаконе• Cоздавался как каноническая  реализация REST-принципов и цели этой достиг.
HTTP для REST систем• это ВСЕ:  хлеб, масло и колбаса сверху.
HTTP для REST систем• Или более формально:  и транспорт,  и метаданные,  и сервис.
HTTP в REST• Для доступа к ресурсу используется  небольшое количество методов HTTP• GET, PUT, DELETE, POST и др. (!) в соо...
HTTP в REST• Для доступа к ресурсу используется  небольшое количество методов HTTP• Для передачи метаданных  используются ...
HTTP в REST• Для доступа к ресурсу используется  небольшое количество методов HTTP• Для передачи метаданных  используются ...
HTTP в REST• Для доступа к ресурсу используется  небольшое количество методов HTTP• Для передачи метаданных  используются ...
HTTP в REST• Для доступа к ресурсу используется  небольшое количество методов HTTP• Для передачи метаданных  используются ...
HTTP в REST• Для доступа к ресурсу используется  небольшое количество методов HTTP• Для передачи метаданных  используются ...
REST• Ключевые понятия:  – Resource            (Ресурс)  – Representation      (Представление)  – State               (Сос...
Первоисточник    • Roy Thomas Fielding    • 2000 год    • REST      – REpresentational      – State      – Transfer
Что предлагает REST• «Все» есть ресурсы• Каждый ресурс уникален• Отказаться от использования  одинаковых URI для разных ре...
Что предлагает REST• Каждый ресурс может иметь  различные представления
Что предлагает REST• Каждый ресурс может иметь  различные представления• Для человека – HTML,…• Для “enterprise” – XML,…• ...
Что предлагает REST• У ресурса может быть состояние
Что предлагает REST• За изменение состояния ресурса  отвечает КЛИЕНТ
Rest in Action• Примеры ресурсов• Ресурс-объекта  /jug/2012-04/presentation/rest Accepts=PPT• Ресурс как запрос  /jug/sear...
Rest in Action• Примеры операций• Список авторов  GET /jug/author• Добавить автора  POST /jug/author?name=Denis• Удалить а...
Rest in Action• Примеры операций• Список авторов  GET /jug/author• Добавить автора  POST /jug/author/Denis• Удалить автора...
REST in ActionRequest:   GET /user/DENIS HTTP/1.1           Accept: application/json
REST in ActionRequest:    GET /user/DENIS HTTP/1.1            Accept: application/jsonResponse:   (?)
REST in ActionRequest:    GET /user/DENIS HTTP/1.1            Accept: application/jsonResponse:   HTTP/1.0 200 OK         ...
REST in ActionRequest:   Как создать нового USER’a?
REST in ActionRequest:    Как создать нового USER’a?            POST /user HTTP/1.1            Content-Length: 27         ...
REST in ActionRequest:   Как изменить USER’a?
REST in ActionRequest:    Как изменить USER’a?            PUT /user/DENIS HTTP/1.1            Content-Length: 27          ...
REST in ActionRequest:   Как удалить USER’a?
REST in ActionRequest:    Как удалить USER’a?            DELETE /user/DENIS HTTP/1.1Response:   HTTP/1.0 200 OK
REST in ActionRequest:   А если удалить еще раз?
REST in ActionRequest:    Как удалить USER’a?            DELETE /user/DENIS HTTP/1.1Response:            HTTP/1.0   404 No...
REST in ActionRequest:    Список пользователей?            GET /user HTTP/1.1            Accept: application/json         ...
REST сам по себе "рассчитан" только на то, чтобы система  была простой, понятной и      масштабируемой
Upcoming SlideShare
Loading in...5
×

REST

970

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
970
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Что это - очередная “уловка консультантов от enterprise” ? А нам это нужно ? Не пытаются ли нас «опять» увести в дебри «enterprise»?
  • Как обычно бывает в мире “стандартов” и “денег” Там где речь идет о “больших” деньгах к вам приезжают и продают “готовые” и “работающие” и сказочные решение за “дофига” реальных  денег.
  • Я думаю что каждому приходилось слышать - “Мы купили СУПЕР-ПУРЕР-ПАРАВОЗ который заменит все ваши самописанные велосипеды! Вот он. Теперь вы должны его запустить”
  • Как часто мы видели как СУПЕР-МЕГА-ПАРАВОЗ превращается в МЕГА-ПШИК? Вы обращали внимание как мы с готовностью тратим большое количество времени, что бы утвердить и начать использовать, что-то, что очень похоже на другую систему, которая уже потерпела фиаско. Мы используем HTTP, но только потому, что этот протокол позволяет нам меньше взаимодействовать с нашей сетью и специалистами по безопасности. Мы подменяем простоту яркими штучками и мастерами настройки , звенелками, гуделками и трещалками. велосипед - ? хотим лучше и больше - ? большой веловипед
  • Случалось-ли вам ходить в “программистский АД”? Вы обращали внимание, что обочины этой дороги,  завалены именно такими  “супер-модными-революционными” ВЕЛОСИПЕДАМИ со всеми их свистелками-генерилками-сериализаторами-валидаторами-биндерами-визардами.
  • Попробуйте убедить меня еще раз в том, что "клац-клац — и готово" - это то, что мне нужно. Ха-Ха-Ха 
  • Так чем нам может помочь REST?
  • Так чем нам может помочь REST?
  • Ваши демоны не падут от одного слова REST
  • Следовательно его надо как минимум ПОНЯТЬ. А то зачастую можно услышать снова: "Я Пастернака не читал, но осуждаю..."
  • REST предлагает не мудрить а использовать те средства которые есть в веб с начала времён. REST предлагает не плодить новые сущности а использовать то что уже давно прекрасно работает.
  • REST предлагает не мудрить а использовать те средства которые есть в веб с начала времён. REST предлагает не плодить новые сущности а использовать то что уже давно прекрасно работает.
  • HTTP строился из принципов REST Или же REST описал то, что заложенно в HTTP ?
  • Ничего сложного тут нет: стартовая строка запроса, которая выглядит так: METHOD URI HTTP/ VERSION , где METHOD — это как раз метод HTTP-запроса, URI — идентификатор ресурса, VERSION — версия протокола (на данный момент актуальна версия 1.1). Заголовки — это набор пар имя: значение В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее. Тело сообщения — это, собственно, передаваемые данные. Все достаточно просто :)
  • Resource - > Что нам надо? Какой обьект(сущность) мы хотим «потрогать»
  • в соответствии с их изначальным смыслом
  • в соответствии с их изначальным смыслом
  • Кэширование на стороне клиента (в браузере, в кэше приложения) Кэширование на уровне intermediaries (прокси) Полное использование архитектуры Web Как итог: меньше запросов/трафика на ваши сервера Надо лишь выдавать корректные HTTP-заголовки: Last-Modified; ETag; Expires; Cache-Control
  • в соответствии с их изначальным смыслом
  • в соответствии с их изначальным смыслом
  • в соответствии с их изначальным смыслом
  • REST (REpresentational State Transfer) — это термин был введен в 2000-м году Роем Филдингом (Roy Fielding) — «Designing the Web Architecture: Problems and Insights» - его докторская диссертация одним из разработчиков протокола HTTP в качестве названия группы принципов построения веб-приложений. Вообще REST охватывает более широкую область, нежели HTTP — его можно применять и в других сетях с другими протоколами. REST описывает принципы взаимодействия клиента и сервера, основанные на понятиях «ресурса» и «глагола» (можно понимать их как подлежащее и сказуемое). В случае HTTP ресурс определяется своим URI, а глагол — это HTTP-метод.
  • URIs вместо одной точки входа (RPC) Нет нужды анализировать тело запроса, чтобы понять что с ним делать Балансируется просто по кускам URI: – /users/ - на backends_1 – /orders/ - на backends_2 – /users/[ID]/profile – sharding на уровне [ID] В URI не обязательно должен быть смысл – но это часто удобно – в виде правил именования.
  • Transcript of "REST"

    1. 1. REST
    2. 2. В исполнении: • Denis Udod • java developer • C.T.CO
    3. 3. В исполнении: • Denis Udod • java developer • C.T.CO
    4. 4. В исполнении: • Denis Udod • java developer • C.T.CO
    5. 5. • Опыт – есть
    6. 6. • Опыт – есть – иногда получалось
    7. 7. • Опыт – есть – иногда получалось – реже получалось хорошо
    8. 8. Disclaimer• Я не проповедую истину• Я могу ошибаться• Я могу быть “капитаном очевидность”
    9. 9. RESTЛегкость бытия
    10. 10. • REST тут, REST там• REST спасет мир• Вы еще пользуетесь “мылом” тогда REST идет к вам!
    11. 11. Зачем нам это?• Ведь есть – XML-RPC – SOAP
    12. 12. Зачем нам это?• Ведь есть – XML-RPC – SOAP – CORBA*
    13. 13. Зачем нам это?• Ведь есть – XML-RPC – SOAP – CORBA* * for dinosaurs only
    14. 14. Зачем нам это?• Ведь есть – XML-RPC – SOAP – CORBA• Зачем нам еще одна серебрянная пуля в нашей обойме?
    15. 15. • Велосипеды?
    16. 16. • Нам не нужны ваши велосипеды
    17. 17. • Нам не нужны ваши велосипеды• Мы хотим проверенные, современные решения
    18. 18. А в результате?
    19. 19. В результате
    20. 20. В результате
    21. 21. В результате
    22. 22. REST?• Как нам от него станет легче?
    23. 23. REST?• Как нам от него станет легче?• Может это новая модная «фенечка»?
    24. 24. REST - что это?
    25. 25. REST – это НЕ...
    26. 26. REST – это НЕ...• REST - не протокол• REST - не стандарт• REST - не эксклюзивное предложение
    27. 27. REST – это НЕ...• REST - не протокол• REST - не стандарт• REST - не эксклюзивное предложение• REST - не “серебрянная” пуля
    28. 28. REST - что это?• REST - архитектрурный стиль• RESТ – подход• REST – философия
    29. 29. REST• «Не изобретайте велосипед»• «Все уже украдено до нас»
    30. 30. REST• Используйте то, что уже есть в WEB• Используйте то, что уже давно работает
    31. 31. REST• Как он это предлагает делать?
    32. 32. Вернемся к началу• Что было раньше курица или яйцо?
    33. 33. В начале был HTTP ?• RFC2616
    34. 34. HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
    35. 35. HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
    36. 36. HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
    37. 37. HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
    38. 38. HTTP пример• GET /index.html HTTP/1.1 Host: www.jug.lv User-Agent: Mozilla/5.0 Accept: text/html Connection: close• HTTP/1.0 200 OK Server: nginx/0.6 Content-Language: en Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... <то что вы запрашивали>  …
    39. 39. Ресурсы• GET /index.html HTTP/1.1 Host: www.jug.lv User-Agent: Mozilla/5.0 Accept: text/html Connection: close URI Uniform Resource Identifier — единообразный идентификатор ресурса.
    40. 40. Методы• GET /index.html HTTP/1.1 Host: www.jug.lv User-Agent: Mozilla/5.0 Accept: text/html Connection: close GET, POST, PUT, DELETE… - действие
    41. 41. Мета-информация• GET /index.html HTTP/1.1 Host: www.jug.lv User-Agent: Mozilla/5.0 Accept: text/html Connection: close дополнительная информация, разясняающая что мы хотим
    42. 42. А что в ответе?• HTTP/1.0 200 OK Server: nginx/0.6 Content-Language: en Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... <то что вы запрашивали>  …
    43. 43. А что в ответе?• HTTP/1.0 200 OK Server: nginx/0.6 Content-Language: en Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... <то что вы запрашивали>  …Response Code – 200 – Получилось Ну и OK для тех кто не понял
    44. 44. А что в ответе?• HTTP/1.0 200 OK Server: nginx/0.6 Content-Language: en Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... <то что вы запрашивали>  … дополнительная информация, разясняающая что мы получили
    45. 45. А что в ответе?• HTTP/1.0 200 OK Server: nginx/0.6 Content-Language: en Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... <то что вы запрашивали>  … Ну и само представление
    46. 46. HTTP• Все что надо в одном флаконе
    47. 47. HTTP• Все что надо в одном флаконе• Cоздавался как каноническая реализация REST-принципов
    48. 48. HTTP• Все что надо в одном флаконе• Cоздавался как каноническая реализация REST-принципов и цели этой достиг.
    49. 49. HTTP для REST систем• это ВСЕ: хлеб, масло и колбаса сверху.
    50. 50. HTTP для REST систем• Или более формально: и транспорт, и метаданные, и сервис.
    51. 51. HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• GET, PUT, DELETE, POST и др. (!) в соответствии с их изначальным смыслом
    52. 52. HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки
    53. 53. HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP
    54. 54. HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP• Проксирование — HTTP
    55. 55. HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP• Проксирование — HTTP• Авторизация — тоже через HTTP
    56. 56. HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP• Проксирование — HTTP• Авторизация — тоже через HTTP
    57. 57. REST• Ключевые понятия: – Resource (Ресурс) – Representation (Представление) – State (Состояние) – Transfer (Перенос состояния)
    58. 58. Первоисточник • Roy Thomas Fielding • 2000 год • REST – REpresentational – State – Transfer
    59. 59. Что предлагает REST• «Все» есть ресурсы• Каждый ресурс уникален• Отказаться от использования одинаковых URI для разных ресурсов
    60. 60. Что предлагает REST• Каждый ресурс может иметь различные представления
    61. 61. Что предлагает REST• Каждый ресурс может иметь различные представления• Для человека – HTML,…• Для “enterprise” – XML,…• Для JavaScript – JSON,…
    62. 62. Что предлагает REST• У ресурса может быть состояние
    63. 63. Что предлагает REST• За изменение состояния ресурса отвечает КЛИЕНТ
    64. 64. Rest in Action• Примеры ресурсов• Ресурс-объекта /jug/2012-04/presentation/rest Accepts=PPT• Ресурс как запрос /jug/search?author=Denis• Ресурс действие /jug/author?from=5&size=2
    65. 65. Rest in Action• Примеры операций• Список авторов GET /jug/author• Добавить автора POST /jug/author?name=Denis• Удалить автора ?
    66. 66. Rest in Action• Примеры операций• Список авторов GET /jug/author• Добавить автора POST /jug/author/Denis• Удалить автора DELETE /jug/author/Denis
    67. 67. REST in ActionRequest: GET /user/DENIS HTTP/1.1 Accept: application/json
    68. 68. REST in ActionRequest: GET /user/DENIS HTTP/1.1 Accept: application/jsonResponse: (?)
    69. 69. REST in ActionRequest: GET /user/DENIS HTTP/1.1 Accept: application/jsonResponse: HTTP/1.0 200 OK Content-Language: en Content-Type: application/json; charset=utf-8 Content-Length: 1234 Connection: close { “name”:”DENIS”, “email”: “denis@jug.lv”}
    70. 70. REST in ActionRequest: Как создать нового USER’a?
    71. 71. REST in ActionRequest: Как создать нового USER’a? POST /user HTTP/1.1 Content-Length: 27 Content-Type: application/json {“name”:”DMITRY”, “email”:”dmitry@jug.lv”}Response: HTTP/1.0 200 OK
    72. 72. REST in ActionRequest: Как изменить USER’a?
    73. 73. REST in ActionRequest: Как изменить USER’a? PUT /user/DENIS HTTP/1.1 Content-Length: 27 Content-Type: application/json {“name”:”DENIS”, “email”:”denis@gmail.com”}Response: HTTP/1.0 200 OK
    74. 74. REST in ActionRequest: Как удалить USER’a?
    75. 75. REST in ActionRequest: Как удалить USER’a? DELETE /user/DENIS HTTP/1.1Response: HTTP/1.0 200 OK
    76. 76. REST in ActionRequest: А если удалить еще раз?
    77. 77. REST in ActionRequest: Как удалить USER’a? DELETE /user/DENIS HTTP/1.1Response: HTTP/1.0 404 Not found
    78. 78. REST in ActionRequest: Список пользователей? GET /user HTTP/1.1 Accept: application/json HTTP/1.0 200 OKResponse: Content-Language: en Content-Type: application/json; charset=utf-8 Content-Length: 1234 Connection: close { “user”:{“name”:”DMITRY”, “email”: “dmitry@jug.lv”} }
    79. 79. REST сам по себе "рассчитан" только на то, чтобы система была простой, понятной и масштабируемой
    1. A particular slide catching your eye?

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

    ×