REST

Post on 10-May-2015

927 views 1 download

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 ?

• RFC2616

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”: “denis@jug.lv”}

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”:”dmitry@jug.lv”}

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”:”denis@gmail.com”}

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

“dmitry@jug.lv”}}

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

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

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