REST
Transcript of REST
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 по-человечески
• HTTP = Протокол
• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)
• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)
• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]
HTTP по-человечески
• HTTP = Протокол
• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)
• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)
• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]
HTTP по-человечески
• HTTP = Протокол
• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)
• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)
• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]
HTTP по-человечески
• HTTP = Протокол
• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)
• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)
• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]
HTTP пример
• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close
• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close
... <то что вы запрашивали> …
Ресурсы
• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close
URI Uniform Resource Identifier — единообразный идентификатор ресурса.
Методы
• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close
GET, POST, PUT, DELETE… - действие
Мета-информация
• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close
дополнительная информация, разясняающая что мы хотим
А что в ответе?
• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали> …
А что в ответе?
• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали> …
Response Code – 200 – Получилось Ну и OK для тех кто не понял
А что в ответе?
• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали> …дополнительная информация, разясняающая что мы получили
А что в ответе?
• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: 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.1Accept: application/json
REST in Action
Request:
Response:
GET /user/DENIS HTTP/1.1Accept: application/json
(?)
REST in Action
Request:
Response:
GET /user/DENIS HTTP/1.1Accept: application/json
HTTP/1.0 200 OKContent-Language: enContent-Type: application/json; charset=utf-8Content-Length: 1234Connection: close{ “name”:”DENIS”, “email”: “[email protected]”}
REST in ActionRequest: Как создать нового USER’a?
REST in ActionRequest:
Response:
Как создать нового USER’a?
POST /user HTTP/1.1Content-Length: 27 Content-Type: application/json{“name”:”DMITRY”, “email”:”[email protected]”}
HTTP/1.0 200 OK
REST in ActionRequest: Как изменить USER’a?
REST in ActionRequest:
Response:
Как изменить USER’a?
PUT /user/DENIS HTTP/1.1Content-Length: 27 Content-Type: application/json{“name”:”DENIS”, “email”:”[email protected]”}
HTTP/1.0 200 OK
REST in ActionRequest: Как удалить USER’a?
REST in ActionRequest:
Response:
Как удалить USER’a?
DELETE /user/DENIS HTTP/1.1
HTTP/1.0 200 OK
REST in ActionRequest: А если удалить еще раз?
REST in ActionRequest:
Response:
Как удалить USER’a?
DELETE /user/DENIS HTTP/1.1
HTTP/1.0 404 Not found
REST in ActionRequest:
Response:
Список пользователей?GET /user HTTP/1.1Accept: application/json
HTTP/1.0 200 OKContent-Language: enContent-Type: application/json; charset=utf-8Content-Length: 1234Connection: close{ “user”:{“name”:”DMITRY”, “email”:
REST сам по себе "рассчитан" только на то,
чтобы система была простой, понятной и
масштабируемой