Download - ИнтеRESTни уеб услуги
ИнтеRESTни уеб усугиСвилен Иванов
([email protected])(http://svilen-online.blogspot.com)
УебТех 2007, Варна30 юни
Преди да з апочна . . .Преди да з апочна . . .
● С какво ще се опитам да задържа Вашето внимание:– познати или непознати възможности на HTTP
протокола– разбираем начин за предоставяне на уеб услуги– как да осигурим мащабируемост (scalability) и
надеждност на приложенията– как лесно да интегрираме няколко приложения
Какво е „уеб услуга“?Какво е „уеб услуга“?
● Уеб услугите могат да бъдат разгледани като уеб страници предназначени за „компютри“
● Приложенията-клиенти на уеб услуга биха могли да обработят („разберат“) предоставената информацията
Какво не е наред с уеб услугите?Какво не е наред с уеб услугите?
● Изискват от разработчика да учат нови технологии:– SOAP, WSDL, UDDI, WS-Security, WS-Reliability,
WS-ReliableMessaging, WS-Addressing, WS-Transaction
● Обвързват програмиста с продукти на големи компании– не се толерират реализации със свободен
софтуер● Сложни технологии
– защото трябва да решават сложни проблеми
Какви услуги искаме?Какви услуги искаме?
● За прости услуги споменатите технологии са прекалено голямо усилие
● Какви услуги могат да бъдат наречени „прости“:– действия, които са достъпни за потребителя:
● блог – добавяне, изтриване или редактиране на статия, редактиране на коментари, търсене по ключови думи, RSS/PDF вариант на статиите
● фото сайт - добавяне, изтриване или редактиране на снимки, достъп до различни по размери варианти на снимката, EXIF информацията; подреждане на снимките по фото албуми
С какво разполагаме?С какво разполагаме?
● Разработчиците познават (X)HTML и CSS:– не се плашат от малко XML– някои предпочитат JSON
● Запознати с HTTP протокола– URI (URL)– методи GET, POST– заглавие на заявката: content-type, cookies
● XMLHttpRequest
Архитектура ориентирана към Архитектура ориентирана към ресурсиресурси
● Ресурси– самостоятелна единица информация, която има
смисъл сама по себе си● Примери
– последната написана статия в блог– списък със статии написани 25 юни 2007– статии отбелязани с етикета „webtech“– статията „Уебтех във Варна“– петия коментар към статията „Уебтех във
Варна“– списък с коментари за дадена статия
Ресурси и 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
Ресурси и 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
Манипулиране на ресурситеМанипулиране на ресурсите
● Изпълнение на HTTP заявка с подходящ метод– „метод“ като във <form method=“post“....>– GET, POST са по-известни от PUT, DELETE, HEAD,
OPTIONS● Видове манипулиране
– Извличане на ресурс: HTTP GET– Създаване на нов ресурс: HTTP POST или PUT– Модифициране на ресурс: HTTP PUT– Изтриване на ресурс: HTTP DELETE– Извличане на част от информацията: HEAD
Пример : опростен блогПример : опростен блог
● Ресурси:– Основния ресурс е съвкупност от статии (post)– Представяния:
● Списък на заглавията на всички статии като HTMLhttp://localhost:3000/svi/posts
● Пълен текст на статията като HTML:http://localhost:3000/svi/posts/[id]
● Възможности:– Добавяне, редактиране, изтриване на статия– Извличане на списък статии като HTML
Демонстрация
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
POST : добавяне на нов ресурсPOST : добавяне на нов ресурс
● Резултата от изпълнението е HTTP статус код
● Сървъра връща в заглавната част на отговора полето „Location:“ указващо URI на новосъздадения ресурс
HTTP/1.1 201 CreatedDate: Wed, 27 Jun 2007 23:26:23 GMTLocation: http://localhost:3000/svi/posts/1
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
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
PUT v s . POST . F i gh t !PUT v s . POST . F i gh t !
● Защо не се използва PUT за добавяне?– Ако предварително е известено URI на ресурса,
който ще се добавя – то PUT може да се използва за създаване
– В противен случай сървъра ще генерира URI в Location полето на отговора на заявката
DELETE : из триванеDELETE : из триване
● Отново не може да се направи с <form ...>– Отново може да се използва в XMLHttpRequest:var httpRequest = new XMLHttpRequest();httpRequest.open('DELETE', '/svi/posts/1', true);
● Резултата от изпълнение е HTTP статус код
DELETE /svi/posts/1 HTTP/1.0
Обобщение на компонентите на Обобщение на компонентите на REST REST
● Ресурсът е единицата в системата, която искаме и има смисъл да се направи достъпна за други приложения
● Всеки ресурс се идентифицира с URI● Ресурсите могат да имат няколко
представяния● Ресурсите се манипулират през унифициран
интерфейс (GET/DELETE/PUT и т.н.)
Какво още предлага RESTКакво още предлага REST
● Услугата не трябва да зависи от предишни заявки на клиента– необходимата информация трябва да бъде в
заявката (напр. GET параметри)– не винаги е възможно да се приложи на
практика– Защо? Мащабируемост!
● Тъй като цялата информация за обработването на заявката е в самата заявка, няма значение кой сървър от група сървъри ще изпълни заявката.
● Състоянието от предишни заявки не е необходимо да се споделя от всички сървъри
Какво още предлага RESTКакво още предлага REST
● Поощряват се връзки към други ресурси в текущото представяне на даден ресурс– Не е необходимо да минеш през определен път
за да получиш конкретно представяне на ресурс след като веднъж си стигнал до него
– Защо? Оптимизация!● Веднъж открити ресурсите, информацията къде се
намират може да се съхрани (cache) и да се използва повторно
Какво още предлага RESTКакво още предлага REST
● Без странични ефекти– GET/HEAD
● не трябва да променят състоянието на ресурсите, независимо колко пъти са изпълнени (safety)
– PUT/DELETE● след първото изпълнение, всяко следващо не трябва
да променя ресурс на сървъра (idempotence)
– POST● трудно постижимо поведение като при PUT/DELETE
(но не невъзможно)
– Защо? Надеждност! ● „Ако не стане първия път, пробвай пак“
Какво още предлага RESTКакво още предлага REST
● Достатъчни ли са 5-6 метода за манипулиране?– Не се поощрява измисляне на нови методи,
защото интерфейса престава да бъде унифициран
– Потребителите на услугата ще са свикнали с определен подход (GET - извлича, POST – създава, т.н.)
– Лесно се следи и филтрира използване (и/или злоупотребата) с услугата
С кои помощни проекти може да С кои помощни проекти може да се реализира RESTсе реализира REST
● REST може да се реализира на поризволен език или framework
● Restlet (Java)– на път е JSR 311: Java API for RESTful Web
Services● Ruby On Rails (Ruby)● Django (Python)● Catalyst (Perl)
Благодаря за вниманието!Въпроси, коментари?