Интеrestни уеб услуги

25
ИнтеRESTни уеб усуги Свилен Иванов ([email protected]) (http://svilen-online.blogspot.com) УебТех 2007, Варна 30 юни

Upload: svilen

Post on 15-Oct-2014

530 views

Category:

Documents


2 download

DESCRIPTION

REST (Representational State Transfer) е архитектурен стил за изграждане на лесни, разбираемии мащабируеми уеб услуги (web services). За мнозина разработчици уеб услугите предизвикватнеприятни (меко казано) чувства1. Това е така, защото тежките решения за предоставяне науслуги в уеб (например SOAP) са неудобни и сложни за прилагане и изискват допълнителноразучаване на множество други технологии. REST се базира на фундаментите на уеб: HTTP, URIи XHTML – и може да да се реализира с всеки език за програмиране на уеб или платформа.Аудиторията ще бъде запозната с помощта на примери с основните принципи за изгражданена услуги чрез методологията на REST. Ще бъдат подчертани предимствата и възможностите науслугите. Ще бъде показано защо този стил набира все по-голяма популярност и защо големикомпании като Amazon, Ebay, Google предоставят главно REST-базирани услуги. Ще бъдедемонстрирано AJAX приложение като клиент на REST уеб услуга предоставена от Ruby on Railsи Java Restlet приложение.

TRANSCRIPT

Page 1: ИнтеRESTни уеб услуги

ИнтеRESTни уеб усугиСвилен Иванов

([email protected])(http://svilen-online.blogspot.com)

УебТех 2007, Варна30 юни

Page 2: ИнтеRESTни уеб услуги

Преди да з апочна . . .Преди да з апочна . . .

● С какво ще се опитам да задържа Вашето внимание:– познати или непознати възможности на HTTP

протокола– разбираем начин за предоставяне на уеб услуги– как да осигурим мащабируемост (scalability) и

надеждност на приложенията– как лесно да интегрираме няколко приложения

Page 3: ИнтеRESTни уеб услуги

Какво е „уеб услуга“?Какво е „уеб услуга“?

● Уеб услугите могат да бъдат разгледани като уеб страници предназначени за „компютри“

● Приложенията-клиенти на уеб услуга биха могли да обработят („разберат“) предоставената информацията

Page 4: ИнтеRESTни уеб услуги

Какво не е наред с уеб услугите?Какво не е наред с уеб услугите?

● Изискват от разработчика да учат нови технологии:– SOAP, WSDL, UDDI, WS-Security, WS-Reliability,

WS-ReliableMessaging, WS-Addressing, WS-Transaction

● Обвързват програмиста с продукти на големи компании– не се толерират реализации със свободен

софтуер● Сложни технологии

– защото трябва да решават сложни проблеми

Page 5: ИнтеRESTни уеб услуги

Какви услуги искаме?Какви услуги искаме?

● За прости услуги споменатите технологии са прекалено голямо усилие

● Какви услуги могат да бъдат наречени „прости“:– действия, които са достъпни за потребителя:

● блог – добавяне, изтриване или редактиране на статия, редактиране на коментари, търсене по ключови думи, RSS/PDF вариант на статиите

● фото сайт - добавяне, изтриване или редактиране на снимки, достъп до различни по размери варианти на снимката, EXIF информацията; подреждане на снимките по фото албуми

Page 6: ИнтеRESTни уеб услуги

С какво разполагаме?С какво разполагаме?

● Разработчиците познават (X)HTML и CSS:– не се плашат от малко XML– някои предпочитат JSON

● Запознати с HTTP протокола– URI (URL)– методи GET, POST– заглавие на заявката: content-type, cookies

● XMLHttpRequest

Page 7: ИнтеRESTни уеб услуги

Архитектура ориентирана към Архитектура ориентирана към ресурсиресурси

● Ресурси– самостоятелна единица информация, която има

смисъл сама по себе си● Примери

– последната написана статия в блог– списък със статии написани 25 юни 2007– статии отбелязани с етикета „webtech“– статията „Уебтех във Варна“– петия коментар към статията „Уебтех във

Варна“– списък с коментари за дадена статия

Page 8: ИнтеRESTни уеб услуги

Ресурси и UR I sРесурси и UR I s

● Ресурсите могат да бъдат представени с (поне едно) URI

● Примери– последната написана статия в блог:

http://example.com/svi/posts/latest– списък със статии написани 25 юни 2007:

http://example.com/svi/posts/2007/06/25– статии отбелязани с етикета „webtech“c

http://example.com/svi/tags/webtech

Page 9: ИнтеRESTни уеб услуги

Ресурси и UR I sРесурси и UR I s

● Примери:– Статия „Уебтех във Варна“:

http://example.com/svi/webtech-in-varna– Коментари към статия „Уебтех във Варна“:

http://example.com/svi/webtech-in-varna/↵comments

– петия коментар към статиятаhttp://example.com/svi/webtech-in-varna/↵comments/5

– статията като PDF:http://example.com/svi/webtech-in-varna/pdf

Page 10: ИнтеRESTни уеб услуги

Манипулиране на ресурситеМанипулиране на ресурсите

● Изпълнение на HTTP заявка с подходящ метод– „метод“ като във <form method=“post“....>– GET, POST са по-известни от PUT, DELETE, HEAD,

OPTIONS● Видове манипулиране

– Извличане на ресурс: HTTP GET– Създаване на нов ресурс: HTTP POST или PUT– Модифициране на ресурс: HTTP PUT– Изтриване на ресурс: HTTP DELETE– Извличане на част от информацията: HEAD

Page 11: ИнтеRESTни уеб услуги

Пример : опростен блогПример : опростен блог

● Ресурси:– Основния ресурс е съвкупност от статии (post)– Представяния:

● Списък на заглавията на всички статии като HTMLhttp://localhost:3000/svi/posts

● Пълен текст на статията като HTML:http://localhost:3000/svi/posts/[id]

● Възможности:– Добавяне, редактиране, изтриване на статия– Извличане на списък статии като HTML

Page 12: ИнтеRESTни уеб услуги

Демонстрация

Page 13: ИнтеRESTни уеб услуги

POST : добавяне на нов ресурсPOST : добавяне на нов ресурс

● Може да се изпълни с всеки браузър с подходяща HTML страница

● Съдържанието на ресурса може да бъда предадено чрез:– application/x-www-form-urlencoded

POST /svi/posts HTTP/1.0Host: localhost:3000Content-Type: application/x-www-form-urlencodedContent-Length: 65

title=Breaking%20News&content=Global%20Warming%20is%20not%20Myth

– multipart/form-data

Page 14: ИнтеRESTни уеб услуги

POST : добавяне на нов ресурсPOST : добавяне на нов ресурс

● Резултата от изпълнението е HTTP статус код

● Сървъра връща в заглавната част на отговора полето „Location:“ указващо URI на новосъздадения ресурс

HTTP/1.1 201 CreatedDate: Wed, 27 Jun 2007 23:26:23 GMTLocation: http://localhost:3000/svi/posts/1

Page 15: ИнтеRESTни уеб услуги

GET: извличанеGET : извличане

● Може да се изпълни с всеки браузърGET /svi/posts/1 HTTP/1.0

● Достатъчно е да се знае URI на ресурса● Как се определя кое представяне на ресурса

да се предостави?– в зависимост от URI (за предпочитане):

http://localhost:3000/posts/plain-text– в зависимост от заглавната част на браузъра

(content negotioation)

Accept: text/xml, application/xml, text/html; q=0.9, text/plain; q=0.8, image/png, */*; q=0.5

Page 16: ИнтеRESTни уеб услуги

PUT: редактиранеPUT: редактиране

● Същия формат като POST● Не може да се направи с <form ...>

– Може да се използва в XMLHttpRequest:var httpRequest = new XMLHttpRequest();httpRequest.open('PUT', '/svi/posts/1', true);

● Резултата от изпълнение е HTTP статус код

PUT /svi/posts/1 HTTP/1.0Host: localhost:3000Content-Type: application/x-www-form-urlencodedContent-Length: 95

title=Old%20News%20It%20is%20already%20happening%20&content=Global%20Warming%20is%20not%20Myth

Page 17: ИнтеRESTни уеб услуги

PUT v s . POST . F i gh t !PUT v s . POST . F i gh t !

● Защо не се използва PUT за добавяне?– Ако предварително е известено URI на ресурса,

който ще се добавя – то PUT може да се използва за създаване

– В противен случай сървъра ще генерира URI в Location полето на отговора на заявката

Page 18: ИнтеRESTни уеб услуги

DELETE : из триванеDELETE : из триване

● Отново не може да се направи с <form ...>– Отново може да се използва в XMLHttpRequest:var httpRequest = new XMLHttpRequest();httpRequest.open('DELETE', '/svi/posts/1', true);

● Резултата от изпълнение е HTTP статус код

DELETE /svi/posts/1 HTTP/1.0

Page 19: ИнтеRESTни уеб услуги

Обобщение на компонентите на Обобщение на компонентите на REST REST

● Ресурсът е единицата в системата, която искаме и има смисъл да се направи достъпна за други приложения

● Всеки ресурс се идентифицира с URI● Ресурсите могат да имат няколко

представяния● Ресурсите се манипулират през унифициран

интерфейс (GET/DELETE/PUT и т.н.)

Page 20: ИнтеRESTни уеб услуги

Какво още предлага RESTКакво още предлага REST

● Услугата не трябва да зависи от предишни заявки на клиента– необходимата информация трябва да бъде в

заявката (напр. GET параметри)– не винаги е възможно да се приложи на

практика– Защо? Мащабируемост!

● Тъй като цялата информация за обработването на заявката е в самата заявка, няма значение кой сървър от група сървъри ще изпълни заявката.

● Състоянието от предишни заявки не е необходимо да се споделя от всички сървъри

Page 21: ИнтеRESTни уеб услуги

Какво още предлага RESTКакво още предлага REST

● Поощряват се връзки към други ресурси в текущото представяне на даден ресурс– Не е необходимо да минеш през определен път

за да получиш конкретно представяне на ресурс след като веднъж си стигнал до него

– Защо? Оптимизация!● Веднъж открити ресурсите, информацията къде се

намират може да се съхрани (cache) и да се използва повторно

Page 22: ИнтеRESTни уеб услуги

Какво още предлага RESTКакво още предлага REST

● Без странични ефекти– GET/HEAD

● не трябва да променят състоянието на ресурсите, независимо колко пъти са изпълнени (safety)

– PUT/DELETE● след първото изпълнение, всяко следващо не трябва

да променя ресурс на сървъра (idempotence)

– POST● трудно постижимо поведение като при PUT/DELETE

(но не невъзможно)

– Защо? Надеждност! ● „Ако не стане първия път, пробвай пак“

Page 23: ИнтеRESTни уеб услуги

Какво още предлага RESTКакво още предлага REST

● Достатъчни ли са 5-6 метода за манипулиране?– Не се поощрява измисляне на нови методи,

защото интерфейса престава да бъде унифициран

– Потребителите на услугата ще са свикнали с определен подход (GET - извлича, POST – създава, т.н.)

– Лесно се следи и филтрира използване (и/или злоупотребата) с услугата

Page 24: ИнтеRESTни уеб услуги

С кои помощни проекти може да С кои помощни проекти може да се реализира RESTсе реализира REST

● REST може да се реализира на поризволен език или framework

● Restlet (Java)– на път е JSR 311: Java API for RESTful Web

Services● Ruby On Rails (Ruby)● Django (Python)● Catalyst (Perl)

Page 25: ИнтеRESTни уеб услуги

Благодаря за вниманието!Въпроси, коментари?