REST

79
REST

Transcript of REST

Page 1: REST

REST

Page 2: REST

• Denis Udod• java developer• C.T.CO

В исполнении:

Page 3: REST

• Denis Udod• java developer• C.T.CO

В исполнении:

Page 4: REST

• Denis Udod• java developer• C.T.CO

В исполнении:

Page 5: REST

• Опыт– есть

Page 6: REST

• Опыт– есть– иногда получалось

Page 7: REST

• Опыт– есть– иногда получалось– реже получалось

хорошо

Page 8: REST

Disclaimer

• Я не проповедую истину• Я могу ошибаться• Я могу быть “капитаном

очевидность”

Page 9: REST

REST

Легкость бытия

Page 10: REST

• REST тут, REST там

• REST спасет мир

• Вы еще пользуетесь “мылом” тогда REST идет к вам!

Page 11: REST

Зачем нам это?

• Ведь есть– XML-RPC– SOAP

Page 12: REST

Зачем нам это?

• Ведь есть– XML-RPC– SOAP– CORBA*

Page 13: REST

Зачем нам это?

• Ведь есть– XML-RPC– SOAP– CORBA*

* for dinosaurs only

Page 14: REST

Зачем нам это?

• Ведь есть– XML-RPC– SOAP– CORBA

• Зачем нам еще одна серебрянная пуля в нашей обойме?

Page 15: REST

• Велосипеды?

Page 16: REST

• Нам не нужны ваши велосипеды

Page 17: REST

• Нам не нужны ваши велосипеды

• Мы хотим проверенные, современные решения

Page 18: REST

А в результате?

Page 19: REST

В результате

Page 20: REST

В результате

Page 21: REST

В результате

Page 22: REST

REST?

• Как нам от него станет легче?

Page 23: REST

REST?

• Как нам от него станет легче?

• Может это новая модная «фенечка»?

Page 24: REST

REST - что это?

Page 25: REST

REST – это НЕ...

Page 26: REST

REST – это НЕ...

• REST - не протокол• REST - не стандарт• REST - не эксклюзивное

предложение

Page 27: REST

REST – это НЕ...

• REST - не протокол• REST - не стандарт• REST - не эксклюзивное

предложение

• REST - не “серебрянная” пуля

Page 28: REST

REST - что это?

• REST - архитектрурный стиль• RESТ – подход• REST – философия

Page 29: REST

REST

• «Не изобретайте велосипед»

• «Все уже украдено до нас»

Page 30: REST

REST

• Используйте то, что уже есть в WEB

• Используйте то, что уже давно работает

Page 31: REST

REST

• Как он это предлагает делать?

Page 32: REST

Вернемся к началу

• Что было раньше курица или яйцо?

Page 33: REST

В начале был HTTP ?

• RFC2616

Page 34: REST

HTTP по-человечески

• HTTP = Протокол

• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)

• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)

• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]

Page 35: REST

HTTP по-человечески

• HTTP = Протокол

• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)

• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)

• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]

Page 36: REST

HTTP по-человечески

• HTTP = Протокол

• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)

• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)

• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]

Page 37: REST

HTTP по-человечески

• HTTP = Протокол

• Описывает взаимодействие между двумя компьютерами (клиентом и сервером)

• Построенное на базе сообщений:– Запрос (Request) – Ответ (Response)

• Каждое сообщение состоит из трех частей:стартовая строка[заголовок][тело]

Page 38: REST

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

... <то что вы запрашивали>  …

Page 39: REST

Ресурсы

• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close

URI Uniform Resource Identifier — единообразный идентификатор ресурса.

Page 40: REST

Методы

• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close

GET, POST, PUT, DELETE… - действие

Page 41: REST

Мета-информация

• GET /index.html HTTP/1.1Host: www.jug.lvUser-Agent: Mozilla/5.0Accept: text/htmlConnection: close

дополнительная информация, разясняающая что мы хотим

Page 42: REST

А что в ответе?

• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали>  …

Page 43: REST

А что в ответе?

• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали>  …

Response Code – 200 – Получилось Ну и OK для тех кто не понял

Page 44: REST

А что в ответе?

• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали>  …дополнительная информация, разясняающая что мы получили

Page 45: REST

А что в ответе?

• HTTP/1.0 200 OKServer: nginx/0.6Content-Language: enContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close... <то что вы запрашивали>  …Ну и само представление

Page 46: REST

HTTP

• Все что надо в одном флаконе

Page 47: REST

HTTP

• Все что надо в одном флаконе

• Cоздавался как каноническая реализация REST-принципов

Page 48: REST

HTTP

• Все что надо в одном флаконе

• Cоздавался как каноническая реализация REST-принципов

и цели этой достиг.

Page 49: REST

HTTP для REST систем

• это ВСЕ:хлеб, масло и колбаса сверху.

Page 50: REST

HTTP для REST систем

• Или более формально:и транспорт, и метаданные,и сервис.

Page 51: REST

HTTP в REST

• Для доступа к ресурсу используется небольшое количество методов HTTP

• GET, PUT, DELETE, POST и др.

(!) в соответствии с их изначальным смыслом

Page 52: REST

HTTP в REST

• Для доступа к ресурсу используется небольшое количество методов HTTP

• Для передачи метаданных используются HTTP-заголовки

Page 53: REST

HTTP в REST

• Для доступа к ресурсу используется небольшое количество методов HTTP

• Для передачи метаданных используются HTTP-заголовки

• Кеширование во всех видах обеспечивает HTTP

Page 54: REST

HTTP в REST

• Для доступа к ресурсу используется небольшое количество методов HTTP

• Для передачи метаданных используются HTTP-заголовки

• Кеширование во всех видах обеспечивает HTTP

• Проксирование — HTTP

Page 55: REST

HTTP в REST

• Для доступа к ресурсу используется небольшое количество методов HTTP

• Для передачи метаданных используются HTTP-заголовки

• Кеширование во всех видах обеспечивает HTTP

• Проксирование — HTTP• Авторизация — тоже через HTTP

Page 56: REST

HTTP в REST

• Для доступа к ресурсу используется небольшое количество методов HTTP

• Для передачи метаданных используются HTTP-заголовки

• Кеширование во всех видах обеспечивает HTTP

• Проксирование — HTTP• Авторизация — тоже через HTTP

Page 57: REST

REST

• Ключевые понятия: – Resource (Ресурс)– Representation (Представление)– State (Состояние)– Transfer (Перенос состояния)

Page 58: REST

Первоисточник

• Roy Thomas Fielding

• 2000 год

• REST –REpresentational –State –Transfer

Page 59: REST

Что предлагает REST

• «Все» есть ресурсы

• Каждый ресурс уникален

• Отказаться от использования одинаковых URI для разных ресурсов

Page 60: REST

Что предлагает REST

• Каждый ресурс может иметь различные представления

Page 61: REST

Что предлагает REST

• Каждый ресурс может иметь различные представления

• Для человека – HTML,…• Для “enterprise” – XML,…• Для JavaScript – JSON,…

Page 62: REST

Что предлагает REST

• У ресурса может быть состояние

Page 63: REST

Что предлагает REST

• За изменение состояния ресурса отвечает КЛИЕНТ

Page 64: REST

Rest in Action

• Примеры ресурсов

• Ресурс-объекта/jug/2012-04/presentation/rest Accepts=PPT

• Ресурс как запрос/jug/search?author=Denis

• Ресурс действие/jug/author?from=5&size=2

Page 65: REST

Rest in Action

• Примеры операций

• Список авторовGET /jug/author

• Добавить автораPOST /jug/author?name=Denis

• Удалить автора?

Page 66: REST

Rest in Action

• Примеры операций

• Список авторовGET /jug/author

• Добавить автораPOST /jug/author/Denis

• Удалить автораDELETE /jug/author/Denis

Page 67: REST

REST in Action

Request:

GET /user/DENIS HTTP/1.1Accept: application/json

Page 68: REST

REST in Action

Request:

Response:

GET /user/DENIS HTTP/1.1Accept: application/json

(?)

Page 69: REST

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]”}

Page 70: REST

REST in ActionRequest: Как создать нового USER’a?

Page 71: REST

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

Page 72: REST

REST in ActionRequest: Как изменить USER’a?

Page 73: REST

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

Page 74: REST

REST in ActionRequest: Как удалить USER’a?

Page 75: REST

REST in ActionRequest:

Response:

Как удалить USER’a?

DELETE /user/DENIS HTTP/1.1

HTTP/1.0 200 OK

Page 76: REST

REST in ActionRequest: А если удалить еще раз?

Page 77: REST

REST in ActionRequest:

Response:

Как удалить USER’a?

DELETE /user/DENIS HTTP/1.1

HTTP/1.0 404 Not found

Page 78: REST

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”:

[email protected]”}}

Page 79: REST

REST сам по себе "рассчитан" только на то,

чтобы система была простой, понятной и

масштабируемой