REST
REST(отангл.REpresentationalStateTransfer— «передача репрезентативного состояния» или «передача „самоописываемого “состояния») —архитектурный стильвзаимодействия компонентов распределённого приложения всети.Другими словами, REST — это набор правил того, как программисту организовать написание кода серверного приложения, чтобы все системы легко обменивались данными и приложение можно было масштабировать[1].REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённойгипермедиа-системы. В определённых случаях (интернет-магазины,поисковые системы;прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры. В широком смысле[уточнить]компоненты в REST взаимодействуют наподобие взаимодействия клиентов и серверов воВсемирной паутине.REST является альтернативойRPC[2].
Винтернетевызов удалённой процедурыможет представлять собой обычныйHTTP-запрос (обычноGETилиPOST;такой запрос называют«REST-запрос»), а необходимые данные передаются в качествепараметровзапроса[3][4].
Длявеб-служб,построенных с учётом REST (то есть не нарушающих накладываемых им ограничений), применяют термин «RESTful».
В отличие от веб-сервисов (веб-служб) на основеSOAP,не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST являетсяархитектурным стилем,в то время как SOAP является протоколом. Несмотря на то, что REST не является стандартом сам по себе, большинство RESTful-реализаций используют такие стандарты, какHTTP,URL,JSONи, реже,XML.
История термина
[править|править код]Хотя даннаяконцепциялежит в самой основеВсемирной паутины,термин «REST» был введёнРоем Филдингом,одним из создателей протокола «HTTP», лишь в 2000 году[4].В своей диссертации«Архитектурные стили и дизайн сетевых программных архитектур» («Architectural Styles and the Design of Network-based Software Architectures»)[5]вКалифорнийском университете в Ирвайне[3]он подвёл теоретическую основу под способ взаимодействияклиентовисервероввоВсемирной паутине,абстрагировав его и назвав «передачей представительного состояния» («Representational State Transfer»). Филдинг описал концепцию построения распределённого приложения, при которой каждый запрос (REST-запрос) клиента к серверу содержит в себе исчерпывающую информацию о желаемом ответе сервера (желаемом представительном состоянии), и сервер не обязан сохранять информацию о состоянии клиента («клиентской сессии»).
Стиль «REST» развивался параллельно с «HTTP 1.1», разработанным в 1996—1999 годах, основываясь на существующем дизайне «HTTP1.0», разработанном в1996 году[6].
Свойства архитектуры REST
[править|править код]Свойства архитектуры, которые зависят от ограничений, наложенных на REST-системы:
- Производительность: взаимодействие компонентов системы может являться доминирующим фактором производительности и эффективности сети с точки зрения пользователя;
- Масштабируемость для обеспечения большого числа компонентов и взаимодействий компонентов.
Рой Филдинг (один из главных авторов спецификации протокола HTTP) описывает влияние архитектуры REST на масштабируемость следующим образом:
- Простота унифицированного интерфейса;
- Открытость компонентов к возможным изменениям для удовлетворения изменяющихся потребностей (даже при работающем приложении);
- Прозрачность связей между компонентами системы для сервисных служб;
- Переносимость компонентов системы путём перемещения программного кода вместе с данными;
- Надёжность, выражающаяся в устойчивости к отказам на уровне системы при наличии отказов отдельных компонентов, соединений или данных.[3]
Требования к архитектуре REST
[править|править код]Существуетпятьобязательных[7][8]ограничений для построения распределённых REST-приложений поФилдингу[3][9]и одно необязательное.
Накладываемые ограничения определяют работу сервера в том, как он может обрабатывать и отвечать на запросы клиентов. Действуя в рамках этих ограничений, система приобретает такие желательные свойства как производительность, масштабируемость, простота, способность к изменениям, переносимость, отслеживаемость и надёжность.
Если сервис-приложение нарушаетлюбоеиз этих ограничительных условий, данную систему нельзя считать REST-системой[3].
Обязательными условиями-ограничениями являются:
1. Модель клиент-сервер
[править|править код]Первым ограничением, применимым к гибридной модели, является приведение архитектуры к модели клиент-сервер. Разграничение потребностей является принципом, лежащим в основе данного накладываемого ограничения. Отделение потребности интерфейсаклиентаот потребностейсервера, хранящего данные,повышает переносимостькодаклиентскогоинтерфейсана другие платформы, а упрощениесерверной частиулучшает масштабируемость. Наибольшее же влияние навсемирную паутину,пожалуй, имеет само разграничение, которое позволяет отдельным частям развиваться независимо друг от друга, поддерживая потребности в развитии интернета со стороны различных организаций.[3]
2. Отсутствие состояния
[править|править код]Протокол взаимодействия между клиентом и сервером требует соблюдения следующего условия: в период между запросами клиента никакая информация осостоянииклиентана сервере не хранится (Stateless protocolили «протокол без сохранения состояния»). Все запросы от клиента должны быть составлены так, чтобы сервер получил всю необходимую информацию для выполнения запроса.Состояниесессиипри этом сохраняется на стороне клиента[3].Информация о состоянии сессии может быть передана сервером какому-либо другому сервису (например, в службу базы данных) для поддержания устойчивого состояния, например, на период установления аутентификации. Клиент инициирует отправку запросов, когда он готов (возникает необходимость) перейти в новое состояние.
Во время обработки клиентских запросов считается, что клиент находится впереходном состоянии.Каждое отдельноесостояниеприложенияпредставлено связями, которые могут быть задействованы при следующем обращении клиента.
3. Кэширование
[править|править код]![]() | В разделене хватаетссылок на источники(см.рекомендации по поиску). |
Как и воВсемирной паутине,клиенты, а также промежуточные узлы, могут выполнятькэшированиеответов сервера. Ответы сервера, в свою очередь, должны иметь явное или неявное обозначение как кэшируемые или некэшируемые с целью предотвращения получения клиентами устаревших или неверных данных в ответ на последующие запросы. Правильное использование кэширования способно частично или полностью устранить некоторые проблемы клиент-серверного взаимодействия, ещё больше повышая производительность и масштабируемость системы.
4. Единообразие интерфейса
[править|править код]Наличие унифицированного интерфейса является фундаментальным требованием дизайна REST-сервисов[3].Унифицированные интерфейсы позволяют каждому из сервисов развиваться независимо.
К унифицированным интерфейсам предъявляются следующие четыре ограничительных условия[10][11]:
Идентификация ресурсов
Все ресурсы идентифицируются в запросах, например, с использованиемURIв интернет-системах. Ресурсы концептуально отделены от представлений, которые возвращаются клиентам. Например,серверможет отсылать данные избазы данныхв видеHTML,XMLилиJSON,ни один из которых не является типом хранения внутри сервера.
Манипуляция ресурсами через представление
Если клиент хранит представление ресурса, включая метаданные — он обладает достаточной информацией для модификации или удаления ресурса.
«Самоописываемые» сообщения
Каждое сообщение содержит достаточно информации, чтобы понять, каким образом его обрабатывать. К примеру, обработчик сообщения (parser), необходимый для извлечения данных, может быть указан всписке MIME-типов[3].
Гипермедиа как средство изменения состояния приложения (HATEOAS)
Клиенты изменяют состояние системы только через действия, которые динамически определены в гипермедиа на сервере (к примеру,гиперссылкивгипертексте). Исключая простые точки входа в приложение, клиент не может предположить, что доступна какая-то операция над каким-то ресурсом, если не получил информацию об этом в предыдущих запросах к серверу. Не существует универсального формата для предоставления ссылок между ресурсами, Web Linking (RFC 5988->RFC 8288) иJSON Hypermedia API LanguageАрхивная копияот 27 июня 2014 наWayback Machineявляются двумя популярными форматами предоставления ссылок в REST HYPERMEDIA сервисах.
5. Слои
[править|править код]Клиент обычно не способен точно определить, взаимодействует ли он напрямую ссерверомили же с промежуточным узлом, в связи с иерархической структурой сетей (подразумевая, что такая структура образуетслои). Применение промежуточных серверов способно повысить масштабируемость за счётбалансировки нагрузкии распределённогокэширования.Промежуточные узлы также могут подчинятьсяполитике безопасностис целью обеспеченияконфиденциальности информации[12].
6. Код по требованию (необязательное ограничение)
[править|править код]![]() | В разделене хватаетссылок на источники(см.рекомендации по поиску). |
REST может позволить расширить функциональность клиента за счёт загрузки кода с сервера в видеапплетовилискриптов.Филдинг утверждает, что дополнительное ограничение позволяет проектировать архитектуру, поддерживающую желаемую функциональность в общем случае, но, возможно, за исключением некоторых контекстов.
Преимущества
[править|править код]Рой Филдингуказывал, что приложения, не соответствующие приведённым условиям, не могут называться REST-приложениями. Если же все условия соблюдены, то, по его мнению, приложение получит следующие преимущества[3][9]:
- Надёжность (за счёт отсутствия необходимости сохранять информацию о состоянии клиента, которая может быть утеряна);
- Производительность (за счёт использования кэша);
- Масштабируемость;
- Прозрачность системы взаимодействия (особенно необходимая для приложений обслуживаниясети);
- Простотаинтерфейсов;
- Портативность компонентов;
- Лёгкость внесения изменений;
- Способностьэволюционировать,приспосабливаясь к новым требованиям (на примереВсемирной паутины).
Примечания
[править|править код]- ↑Что такое REST API .Дата обращения: 11 августа 2021.Архивировано11 августа 2021 года.
- ↑Машнин Тимур Сергеевич.Технология Web-сервисов платформы Java. — БХВ-Петербург, 2012. — С. 115. — 560 с. —ISBN 978-5-9775-0778-3.
- ↑12345678910Chapter 5 of Roy Fielding’s dissertation«Representational State Transfer (REST)»Архивная копияот 13 мая 2021 наWayback Machine
- ↑12Fielding discussing the definition of the REST term .Tech.groups.yahoo. Дата обращения: 28 ноября 2013.Архивировано22 октября 2010 года.
- ↑Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST) .ics.uci.edu. Дата обращения: 1 декабря 2015.Архивировано13 мая 2021 года.
- ↑rest-discuss: Message: Re: [rest-discuss] RFC for REST? (11 ноября 2009). Дата обращения: 1 декабря 2015.Архивировано11 ноября 2009 года.
- ↑Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian.5.1// SOA with REST(неопр.)/ Thomas Erl. —Prentice Hall,2013. —ISBN 978-0-13-701251-0.
- ↑Richardson, Leonard; Ruby, Sam (2007),RESTful Web service,O'Reilly Media,ISBN978-0-596-52926-0,Дата обращения:18 января 2011,
The main topic of this book is the web service architectures which can be considered RESTful: those which get a good score when judged on the criteria set forth in Roy Fielding's dissertation.
Источник .Дата обращения: 30 ноября 2016. Архивировано 19 февраля 2012 года. - ↑12Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian.5.1// SOA with REST. — Prentice Hall, 2013. —ISBN 978-0-13-701251-0.
- ↑Wilde, Pautasso, 2011,REST Definition.
- ↑Н. Л. Подколодный, А. В. Семенычев, Д. А. Рассказов, В. Г. Боровский, Е. А. Ананько, Е. В. Игнатьева, Н. Н. Подколодная, О. А. Подколодная, Н. А. КолчановРаспределённая система RESTful-web-сервисов для реконструкции и анализа генных сетей. Вавиловский журнал генетики и селекции, т. 16, N 4/1, 2012
- ↑Hartley Brody.How HTTPS Secures Connections: What Every Web Dev Should Know(англ.).Архивировано24 декабря 2015 года.
Литература
[править|править код]- Erik Wilde, Cesare Pautasso.REST: From Research to Practice. — Springer Science & Business Media, 2011. — 528 p. —ISBN 978-1-4419-8303-9.
Ссылки
[править|править код]- Roy Fielding.Architectural Styles and the Design of Network-based Software Architectures(англ.)(2000). Дата обращения: 20 февраля 2009.Архивировано15 мая 2012 года.
- Cesare Pautasso; Olaf Zimmerman; Frank Leymann.:RESTful Web Services vs. Big Web Services: Making the Right Architectural Decision(англ.).17th International World Wide Web Conference (WWW2008). Дата обращения: 20 февраля 2009.Архивировано15 мая 2012 года.
- Джон Фландерс.Введение в службы RESTful с использованием WCF .MSDN Magazine (январь 2009). Дата обращения: 20 февраля 2009.Архивировано15 мая 2012 года.
- Alex Rodriguez.RESTful Web services: The basics(англ.).IBM. Дата обращения: 15 декабря 2015.Архивировано22 декабря 2015 года.
- Todd Fredrich.REST API Tutorial(англ.).Дата обращения: 27 октября 2016.Архивировано25 февраля 2017 года.