SlideShare ist ein Scribd-Unternehmen logo
1 von 79
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 Action
Request:   GET /user/DENIS HTTP/1.1
           Accept: application/json
REST in Action
Request:    GET /user/DENIS HTTP/1.1
            Accept: application/json
Response:   (?)
REST in Action
Request:    GET /user/DENIS HTTP/1.1
            Accept: application/json

Response:   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 Action
Request:   Как создать нового USER’a?
REST in Action
Request:    Как создать нового 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 Action
Request:   Как изменить USER’a?
REST in Action
Request:    Как изменить 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 Action
Request:   Как удалить USER’a?
REST in Action
Request:    Как удалить USER’a?

            DELETE /user/DENIS HTTP/1.1

Response:   HTTP/1.0 200 OK
REST in Action
Request:   А если удалить еще раз?
REST in Action
Request:    Как удалить USER’a?

            DELETE /user/DENIS HTTP/1.1

Response:
            HTTP/1.0   404 Not found
REST in Action
Request:    Список пользователей?
            GET /user HTTP/1.1
            Accept: application/json

            HTTP/1.0 200 OK
Response:   Content-Language: en
            Content-Type: application/json; charset=utf-8
            Content-Length: 1234
            Connection: close
            {
             “user”:{“name”:”DMITRY”, “email”: “dmitry@jug.lv”}
            }
REST сам по себе "рассчитан"
 только на то, чтобы система
  была простой, понятной и
      масштабируемой

Weitere ähnliche Inhalte

Was ist angesagt?

02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиентыRoman Brovko
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Timur Shemsedinov
 
Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.
Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.
Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.rusonyx
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервераRoman Brovko
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Andrey Smirnov
 
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backendRoman Brovko
 
Web весна 2013 лекция 1
Web весна 2013 лекция 1Web весна 2013 лекция 1
Web весна 2013 лекция 1Technopark
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP7bits
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаIlya Chesnokov
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизацияRoman Brovko
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Yulia Karpova
 
2013 09 14 http-протокол
2013 09 14 http-протокол2013 09 14 http-протокол
2013 09 14 http-протоколYandex
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
сергей спиридонов
сергей спиридоновсергей спиридонов
сергей спиридоновkuchinskaya
 
WordPress REST API
WordPress REST APIWordPress REST API
WordPress REST APIIgor Sazonov
 
Что нам стоит REST Client построить
Что нам стоит REST Client построитьЧто нам стоит REST Client построить
Что нам стоит REST Client построитьMatvey Malkov
 
Что надо знать о HTTP/2
Что надо знать о HTTP/2Что надо знать о HTTP/2
Что надо знать о HTTP/2Badoo Development
 

Was ist angesagt? (20)

02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
 
Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.
Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.
Все о скорости сайтов. Мастер-класс на партнерской конференции 1С-Битрикс.
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
 
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend
 
Web весна 2013 лекция 1
Web весна 2013 лекция 1Web весна 2013 лекция 1
Web весна 2013 лекция 1
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервиса
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015
 
2013 09 14 http-протокол
2013 09 14 http-протокол2013 09 14 http-протокол
2013 09 14 http-протокол
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
JSON-RPC
JSON-RPCJSON-RPC
JSON-RPC
 
сергей спиридонов
сергей спиридоновсергей спиридонов
сергей спиридонов
 
WordPress REST API
WordPress REST APIWordPress REST API
WordPress REST API
 
Что нам стоит REST Client построить
Что нам стоит REST Client построитьЧто нам стоит REST Client построить
Что нам стоит REST Client построить
 
Что надо знать о HTTP/2
Что надо знать о HTTP/2Что надо знать о HTTP/2
Что надо знать о HTTP/2
 

Ähnlich wie REST

!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful ArchitechtureOntico
 
RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)Sergey Skvortsov
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Provectus
 
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IPСтажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IPSmartTools
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSYandex
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
Мировые информационные ресурсы. Лекция 3
Мировые информационные ресурсы. Лекция 3Мировые информационные ресурсы. Лекция 3
Мировые информационные ресурсы. Лекция 3Dmitriy Krukov
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...CocoaHeads
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 67bits
 
Стажировка-2014, занятие 6 (часть 1). Web-приложения
Стажировка-2014, занятие 6 (часть 1). Web-приложенияСтажировка-2014, занятие 6 (часть 1). Web-приложения
Стажировка-2014, занятие 6 (часть 1). Web-приложения7bits
 
Stas Sultanov "REST again? Oh, come on!"
Stas Sultanov "REST again? Oh, come on!"Stas Sultanov "REST again? Oh, come on!"
Stas Sultanov "REST again? Oh, come on!"Fwdays
 
Урок 20: Протокол HTTP - Евгений Концевой
Урок 20: Протокол HTTP - Евгений КонцевойУрок 20: Протокол HTTP - Евгений Концевой
Урок 20: Протокол HTTP - Евгений КонцевойЛеонид Гроховский
 
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...Ontico
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Иван Бибилов: http-протокол
Иван Бибилов: http-протоколИван Бибилов: http-протокол
Иван Бибилов: http-протоколYandex
 

Ähnlich wie REST (20)

!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture
 
RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"
 
Протокол HTTP
Протокол HTTPПротокол HTTP
Протокол HTTP
 
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IPСтажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
Мировые информационные ресурсы. Лекция 3
Мировые информационные ресурсы. Лекция 3Мировые информационные ресурсы. Лекция 3
Мировые информационные ресурсы. Лекция 3
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
 
Стажировка-2014, занятие 6 (часть 1). Web-приложения
Стажировка-2014, занятие 6 (часть 1). Web-приложенияСтажировка-2014, занятие 6 (часть 1). Web-приложения
Стажировка-2014, занятие 6 (часть 1). Web-приложения
 
Stas Sultanov "REST again? Oh, come on!"
Stas Sultanov "REST again? Oh, come on!"Stas Sultanov "REST again? Oh, come on!"
Stas Sultanov "REST again? Oh, come on!"
 
Flask, rest and data
Flask, rest and dataFlask, rest and data
Flask, rest and data
 
Урок 20: Протокол HTTP - Евгений Концевой
Урок 20: Протокол HTTP - Евгений КонцевойУрок 20: Протокол HTTP - Евгений Концевой
Урок 20: Протокол HTTP - Евгений Концевой
 
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
 
Web лекция 1
Web   лекция 1Web   лекция 1
Web лекция 1
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Иван Бибилов: http-протокол
Иван Бибилов: http-протоколИван Бибилов: http-протокол
Иван Бибилов: http-протокол
 

Mehr von Dmitry Buzdin

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?Dmitry Buzdin
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?Dmitry Buzdin
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?Dmitry Buzdin
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDmitry Buzdin
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureDmitry Buzdin
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIsDmitry Buzdin
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахDmitry Buzdin
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fmDmitry Buzdin
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIDmitry Buzdin
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsDmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contestDmitry Buzdin
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery Dmitry Buzdin
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsDmitry Buzdin
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump AnalysisDmitry Buzdin
 

Mehr von Dmitry Buzdin (20)

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows Machines
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop Infrastructure
 
JOOQ and Flyway
JOOQ and FlywayJOOQ and Flyway
JOOQ and Flyway
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
 
Whats New in Java 8
Whats New in Java 8Whats New in Java 8
Whats New in Java 8
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 

REST

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

Hinweis der Redaktion

  1. Что это - очередная “уловка консультантов от enterprise” ? А нам это нужно ? Не пытаются ли нас «опять» увести в дебри «enterprise»?
  2. Как обычно бывает в мире “стандартов” и “денег” Там где речь идет о “больших” деньгах к вам приезжают и продают “готовые” и “работающие” и сказочные решение за “дофига” реальных  денег.
  3. Я думаю что каждому приходилось слышать - “Мы купили СУПЕР-ПУРЕР-ПАРАВОЗ который заменит все ваши самописанные велосипеды! Вот он. Теперь вы должны его запустить”
  4. Как часто мы видели как СУПЕР-МЕГА-ПАРАВОЗ превращается в МЕГА-ПШИК? Вы обращали внимание как мы с готовностью тратим большое количество времени, что бы утвердить и начать использовать, что-то, что очень похоже на другую систему, которая уже потерпела фиаско. Мы используем HTTP, но только потому, что этот протокол позволяет нам меньше взаимодействовать с нашей сетью и специалистами по безопасности. Мы подменяем простоту яркими штучками и мастерами настройки , звенелками, гуделками и трещалками. велосипед - ? хотим лучше и больше - ? большой веловипед
  5. Случалось-ли вам ходить в “программистский АД”? Вы обращали внимание, что обочины этой дороги,  завалены именно такими  “супер-модными-революционными” ВЕЛОСИПЕДАМИ со всеми их свистелками-генерилками-сериализаторами-валидаторами-биндерами-визардами.
  6. Попробуйте убедить меня еще раз в том, что &amp;quot;клац-клац — и готово&amp;quot; - это то, что мне нужно. Ха-Ха-Ха 
  7. Так чем нам может помочь REST?
  8. Так чем нам может помочь REST?
  9. Ваши демоны не падут от одного слова REST
  10. Следовательно его надо как минимум ПОНЯТЬ. А то зачастую можно услышать снова: &amp;quot;Я Пастернака не читал, но осуждаю...&amp;quot;
  11. REST предлагает не мудрить а использовать те средства которые есть в веб с начала времён. REST предлагает не плодить новые сущности а использовать то что уже давно прекрасно работает.
  12. REST предлагает не мудрить а использовать те средства которые есть в веб с начала времён. REST предлагает не плодить новые сущности а использовать то что уже давно прекрасно работает.
  13. HTTP строился из принципов REST Или же REST описал то, что заложенно в HTTP ?
  14. Ничего сложного тут нет: стартовая строка запроса, которая выглядит так: METHOD URI HTTP/ VERSION , где METHOD — это как раз метод HTTP-запроса, URI — идентификатор ресурса, VERSION — версия протокола (на данный момент актуальна версия 1.1). Заголовки — это набор пар имя: значение В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее. Тело сообщения — это, собственно, передаваемые данные. Все достаточно просто :)
  15. Resource - &gt; Что нам надо? Какой обьект(сущность) мы хотим «потрогать»
  16. в соответствии с их изначальным смыслом
  17. в соответствии с их изначальным смыслом
  18. Кэширование на стороне клиента (в браузере, в кэше приложения) Кэширование на уровне intermediaries (прокси) Полное использование архитектуры Web Как итог: меньше запросов/трафика на ваши сервера Надо лишь выдавать корректные HTTP-заголовки: Last-Modified; ETag; Expires; Cache-Control
  19. в соответствии с их изначальным смыслом
  20. в соответствии с их изначальным смыслом
  21. в соответствии с их изначальным смыслом
  22. REST (REpresentational State Transfer) — это термин был введен в 2000-м году Роем Филдингом (Roy Fielding) — «Designing the Web Architecture: Problems and Insights» - его докторская диссертация одним из разработчиков протокола HTTP в качестве названия группы принципов построения веб-приложений. Вообще REST охватывает более широкую область, нежели HTTP — его можно применять и в других сетях с другими протоколами. REST описывает принципы взаимодействия клиента и сервера, основанные на понятиях «ресурса» и «глагола» (можно понимать их как подлежащее и сказуемое). В случае HTTP ресурс определяется своим URI, а глагол — это HTTP-метод.
  23. URIs вместо одной точки входа (RPC) Нет нужды анализировать тело запроса, чтобы понять что с ним делать Балансируется просто по кускам URI: – /users/ - на backends_1 – /orders/ - на backends_2 – /users/[ID]/profile – sharding на уровне [ID] В URI не обязательно должен быть смысл – но это часто удобно – в виде правил именования.