REST
Upcoming SlideShare
Loading in...5
×
 

REST

on

  • 1,093 views

 

Statistics

Views

Total Views
1,093
Views on SlideShare
1,033
Embed Views
60

Actions

Likes
2
Downloads
3
Comments
0

2 Embeds 60

http://www.jug.lv 54
http://jug.lv 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Что это - очередная “уловка консультантов от 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 не обязательно должен быть смысл – но это часто удобно – в виде правил именования.

REST REST Presentation Transcript

  • 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 = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
  • HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
  • HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
  • HTTP по-человечески• HTTP = Протокол• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)• Построенное на базе сообщений: – Запрос (Request) – Ответ (Response)• Каждое сообщение состоит из трех частей: стартовая строка [заголовок] [тело]
  • 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 ... <то что вы запрашивали>  …
  • Ресурсы• GET /index.html HTTP/1.1 Host: www.jug.lv User-Agent: Mozilla/5.0 Accept: text/html Connection: close URI Uniform Resource Identifier — единообразный идентификатор ресурса.
  • Методы• GET /index.html HTTP/1.1 Host: www.jug.lv User-Agent: Mozilla/5.0 Accept: text/html Connection: close GET, POST, PUT, DELETE… - действие
  • Мета-информация• 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 ... <то что вы запрашивали>  …
  • А что в ответе?• 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 для тех кто не понял
  • А что в ответе?• HTTP/1.0 200 OK Server: nginx/0.6 Content-Language: en Content-Type: text/html; charset=utf-8 Content-Length: 1234 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 ... <то что вы запрашивали>  … Ну и само представление
  • HTTP• Все что надо в одном флаконе
  • HTTP• Все что надо в одном флаконе• Cоздавался как каноническая реализация REST-принципов
  • HTTP• Все что надо в одном флаконе• Cоздавался как каноническая реализация REST-принципов и цели этой достиг.
  • HTTP для REST систем• это ВСЕ: хлеб, масло и колбаса сверху.
  • HTTP для REST систем• Или более формально: и транспорт, и метаданные, и сервис.
  • HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• GET, PUT, DELETE, POST и др. (!) в соответствии с их изначальным смыслом
  • HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки
  • HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP
  • HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP• Проксирование — HTTP
  • HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP• Проксирование — HTTP• Авторизация — тоже через HTTP
  • HTTP в REST• Для доступа к ресурсу используется небольшое количество методов HTTP• Для передачи метаданных используются HTTP-заголовки• Кеширование во всех видах обеспечивает HTTP• Проксирование — HTTP• Авторизация — тоже через HTTP
  • REST• Ключевые понятия: – Resource (Ресурс) – Representation (Представление) – State (Состояние) – Transfer (Перенос состояния)
  • Первоисточник • Roy Thomas Fielding • 2000 год • REST – REpresentational – State – Transfer
  • Что предлагает REST• «Все» есть ресурсы• Каждый ресурс уникален• Отказаться от использования одинаковых URI для разных ресурсов
  • Что предлагает REST• Каждый ресурс может иметь различные представления
  • Что предлагает REST• Каждый ресурс может иметь различные представления• Для человека – HTML,…• Для “enterprise” – XML,…• Для JavaScript – JSON,…
  • Что предлагает REST• У ресурса может быть состояние
  • Что предлагает REST• За изменение состояния ресурса отвечает КЛИЕНТ
  • Rest in Action• Примеры ресурсов• Ресурс-объекта /jug/2012-04/presentation/rest Accepts=PPT• Ресурс как запрос /jug/search?author=Denis• Ресурс действие /jug/author?from=5&size=2
  • Rest in Action• Примеры операций• Список авторов GET /jug/author• Добавить автора POST /jug/author?name=Denis• Удалить автора ?
  • Rest in Action• Примеры операций• Список авторов GET /jug/author• Добавить автора POST /jug/author/Denis• Удалить автора DELETE /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 Content-Language: en Content-Type: application/json; charset=utf-8 Content-Length: 1234 Connection: close { “name”:”DENIS”, “email”: “denis@jug.lv”}
  • REST in ActionRequest: Как создать нового USER’a?
  • 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
  • REST in ActionRequest: Как изменить USER’a?
  • 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
  • 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 Not found
  • 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”} }
  • REST сам по себе "рассчитан" только на то, чтобы система была простой, понятной и масштабируемой