Журнал фильтра правок

Фильтры правок (обсуждение) — это автоматизированный механизм проверок правок участников.
(Список | Последние изменения фильтров | Изучение правок | Журнал срабатываний)
Перейти к навигации Перейти к поиску
Подробности записи журнала 3052264

11:18, 4 сентября 2020: 73 «Тестовая строка» 213.230.99.146 (обсуждение) на странице REST, меры: Предупреждение (просмотреть)

Изменения, сделанные в правке



В отличие от веб-сервисов (веб-служб) на основе [[SOAP]], не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST является '''архитектурным стилем''', в то время как SOAP является протоколом. Несмотря на то, что REST не является стандартом сам по себе, большинство RESTful-реализаций используют такие стандарты, как [[HTTP]], [[URL]], [[JSON]] и [[XML]].
В отличие от веб-сервисов (веб-служб) на основе [[SOAP]], не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST является '''архитектурным стилем''', в то время как SOAP является протоколом. Несмотря на то, что REST не является стандартом сам по себе, большинство RESTful-реализаций используют такие стандарты, как [[HTTP]], [[URL]], [[JSON]] и [[XML]].
wadawdawdd


== История термина ==
== История термина ==

Параметры действия

ПеременнаяЗначение
Число правок участника (user_editcount)
null
Имя учётной записи (user_name)
'213.230.99.146'
Возраст учётной записи (user_age)
0
Группы (включая неявные) в которых состоит участник (user_groups)
[ 0 => '*' ]
Права, которые есть у участника (user_rights)
[ 0 => 'createaccount', 1 => 'read', 2 => 'edit', 3 => 'createpage', 4 => 'createtalk', 5 => 'writeapi', 6 => 'viewmywatchlist', 7 => 'editmywatchlist', 8 => 'viewmyprivateinfo', 9 => 'editmyprivateinfo', 10 => 'editmyoptions', 11 => 'abusefilter-log-detail', 12 => 'urlshortener-create-url', 13 => 'centralauth-merge', 14 => 'abusefilter-view', 15 => 'abusefilter-log', 16 => 'vipsscaler-test', 17 => 'flow-hide' ]
Редактирует ли пользователь через мобильное приложение (user_app)
false
Редактирует ли участник через мобильный интерфейс (user_mobile)
false
ID страницы (page_id)
1628507
Пространство имён страницы (page_namespace)
0
Название страницы (без пространства имён) (page_title)
'REST'
Полное название страницы (page_prefixedtitle)
'REST'
Последние десять редакторов страницы (page_recent_contributors)
[ 0 => 'Dobrode valera', 1 => 'WinterheartBot', 2 => 'Kkkvanekkk', 3 => 'BsivkoBot', 4 => '178.57.98.83', 5 => '46.229.218.249', 6 => '146.66.165.124', 7 => 'Ivanavdieienko', 8 => 'MrUriy', 9 => '91.219.27.220' ]
Возраст страницы (в секундах) (page_age)
364713049
Действие (action)
'edit'
Описание правки/причина (summary)
'/* Преамбула */ '
Старая модель содержимого (old_content_model)
'wikitext'
Новая модель содержимого (new_content_model)
'wikitext'
Вики-текст старой страницы до правки (old_wikitext)
''''REST''' (от {{lang-en|'''Re'''presentational '''S'''tate '''T'''ransfer}} — «передача состояния представления») — [[Архитектура программного обеспечения|архитектурный стиль]] взаимодействия компонентов распределённого приложения в [[вычислительная сеть|сети]]. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой [[гипермедиа]]-системы. В определённых случаях ([[интернет-магазин]]ы, [[Поисковая система|поисковые системы]], прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры. В широком смысле{{уточнить}} компоненты в REST взаимодействуют наподобие взаимодействия клиентов и серверов во [[Всемирная паутина|Всемирной паутине]]. REST является альтернативой [[Удалённый вызов процедур|RPC]]<ref>{{книга|автор=Машнин Тимур Сергеевич|заглавие=Технология Web-сервисов платформы Java|издательство=БХВ-Петербург|год=2012|страницы=115|страниц=560|isbn=978-5-9775-0778-3|ответственный=|издание=|место=|isbn2=}}</ref>. В сети [[Интернет]] [[Удалённый вызов процедур|вызов удалённой процедуры]] может представлять собой обычный [[HTTP]]-запрос (обычно [[HTTP|GET]] или [[POST (HTTP)|POST]]; такой запрос называют ''«REST-запрос»''), а необходимые данные передаются в качестве [[параметр]]ов запроса<ref name="Fielding-Ch5" /><ref name=autogenerated1>{{cite web|url=http://tech.groups.yahoo.com/group/rest-discuss/message/6735 |title=Fielding discussing the definition of the REST term |publisher=Tech.groups.yahoo.com |accessdate=2013-11-28}}</ref>. Для [[веб-служба|веб-служб]], построенных с учётом REST (то есть не нарушающих накладываемых им ограничений), применяют термин «'''RESTful'''». В отличие от веб-сервисов (веб-служб) на основе [[SOAP]], не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST является '''архитектурным стилем''', в то время как SOAP является протоколом. Несмотря на то, что REST не является стандартом сам по себе, большинство RESTful-реализаций используют такие стандарты, как [[HTTP]], [[URL]], [[JSON]] и [[XML]]. == История термина == Хотя данная [[концепция]] лежит в самой основе [[Всемирная паутина|Всемирной паутины]], термин «REST» был введён {{нп2|Филдинг, Рой Томас|Роем Филдингом|en|Roy Fielding}}, одним из создателей протокола «[[HTTP]]», лишь в 2000 году<ref name=autogenerated1 />. В своей диссертации ''«Архитектурные стили и дизайн сетевых программных архитектур» («Architectural Styles and the Design of Network-based Software Architectures»)''<ref>{{Cite web|accessdate = 2015-12-01|title = Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST)|url = http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm|publisher = www.ics.uci.edu}}</ref> в [[Калифорнийский университет в Ирвайне|Калифорнийском университете в Ирвайне]]<ref name="Fielding-Ch5">Chapter 5 of Roy Fielding’s dissertation [http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm «Representational State Transfer (REST)»]</ref> он подвёл теоретическую основу под способ взаимодействия [[Клиент (информатика)|клиентов]] и [[Сервер (программное обеспечение)|серверов]] во [[Всемирная паутина|Всемирной паутине]], абстрагировав его и назвав «передачей представительного состояния» («Representational State Transfer'''»'''). Филдинг описал концепцию построения распределённого приложения, при которой каждый запрос (REST-запрос) клиента к серверу содержит в себе исчерпывающую информацию о желаемом ответе сервера (желаемом представительном состоянии), и сервер не обязан сохранять информацию о состоянии клиента («клиентской сессии»). Стиль «REST» развивался параллельно с «[[HTTP 1.1]]», разработанным в 1996—1999 годах, основываясь на существующем дизайне «[[HTTP]] 1.0», разработанном в [[1996 год]]у<ref>{{Cite web|accessdate = 2015-12-01 |date = 2009-11-11 |title = rest-discuss : Message: Re: [rest-discuss] RFC for REST? |url = http://tech.groups.yahoo.com/group/rest-discuss/message/6757 |archiveurl = https://web.archive.org/web/20091111012314/http://tech.groups.yahoo.com/group/rest-discuss/message/6757 |archivedate = 2009-11-11 }}</ref>. == Свойства Архитектуры REST == Свойства архитектуры, которые зависят от ограничений, наложенных на REST-системы: * Производительность — взаимодействие компонентов системы может являться доминирующим фактором производительности и эффективности сети с точки зрения пользователя; * Масштабируемость для обеспечения большого числа компонентов и взаимодействий компонентов. Рой Филдинг — один из главных авторов спецификации протокола HTTP, описывает влияние архитектуры REST на масштабируемость следующим образом: * Простота унифицированного интерфейса; * Открытость компонентов к возможным изменениям для удовлетворения изменяющихся потребностей (даже при работающем приложении); * Прозрачность связей между компонентами системы для сервисных служб; * Переносимость компонентов системы путем перемещения программного кода вместе с данными; * Надёжность, выражающаяся в устойчивости к отказам на уровне системы при наличии отказов отдельных компонентов, соединений или данных.<ref name="Fielding-Ch5" /> == Требования к архитектуре REST == Существует '''шесть''' обязательных ограничений для построения распределённых REST-приложений по Филдингу<ref name="Fielding-Ch5" /><ref name="SOAwithREST">{{книга|автор=Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian|часть=5.1|заглавие=SOA with REST|издательство=Prentice Hall|год=2013|isbn=978-0-13-701251-0}}</ref>. Выполнение этих ограничительных требований обязательно для REST-систем<ref name="SOA with REST">{{книга |заглавие=SOA with REST |год=2013 |издательство=[[Prentice Hall]] |isbn=978-0-13-701251-0 |часть=5.1 |язык=und |автор=Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian |ответственный=Thomas Erl}}</ref><ref name="Richardson 2007">{{Citation|last1=Richardson|first1=Leonard|title=RESTful Web service|year=2007|publisher=O'Reilly Media|isbn=978-0-596-52926-0|url=https://books.google.com/books?id=XUaErakHsoAC|first2=Sam|last2=Ruby|accessdate=18 January 2011|quote=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.}}</ref>. Накладываемые ограничения определяют работу сервера в том, как он может обрабатывать и отвечать на запросы клиентов. Действуя в рамках этих ограничений, система приобретает такие желательные свойства как производительность, масштабируемость, простота, способность к изменениям, переносимость, отслеживаемость и надёжность. Если сервис-приложение нарушает ''любое'' из этих ограничительных условий, данную систему нельзя считать REST-системой<ref name="Fielding-Ch5" />. Обязательными условиями-ограничениями являются: === 1. Модель клиент-сервер === Первым ограничением, применимым к гибридной модели, является приведение архитектуры к модели клиент-сервер. Разграничение потребностей является принципом, лежащим в основе данного накладываемого ограничения. Отделение потребности интерфейса [[Клиент (информатика)|клиента]] от потребностей [[Сервер (приложение)|сервера, хранящего данные]], повышает переносимость [[Программный код|кода]] клиентского [[интерфейс]]а на другие платформы, а упрощение [[Сервер (приложение)|серверной части]] улучшает масштабируемость. Наибольшее же влияние на [[Всемирная паутина|всемирную паутину]], пожалуй, имеет само разграничение, которое позволяет отдельным частям развиваться независимо друг от друга, поддерживая потребности в развитии интернета со стороны различных организаций.<ref name="Fielding-Ch5" /> === 2. Отсутствие состояния === Протокол взаимодействия между клиентом и сервером требует соблюдения следующего условия: в период между запросами клиента никакая информация о ''состоянии'' клиента на сервере не хранится ([[Протокол без сохранения состояния|Stateless protocol]] или «протокол без сохранения состояния»). Все запросы от клиента должны быть составлены так, чтобы сервер получил всю необходимую информацию для выполнения запроса. ''Состояние'' сессии при этом сохраняется на стороне клиента<ref name="Fielding-Ch5"/>. Информация о состоянии сессии может быть передана сервером какому-либо другому сервису (например, в службу базы данных) для поддержания устойчивого состояния, например, на период установления аутентификации. Клиент инициирует отправку запросов, когда он готов (возникает необходимость) перейти в новое состояние. Во время обработки клиентских запросов считается, что клиент находится в ''переходном состоянии''. Каждое отдельное ''состояние'' приложения представлено связями, которые могут быть задействованы при следующем обращении клиента. === 3. Кэширование === {{Нет источников в разделе|дата=2017-03-16}} Как и во [[Всемирная паутина|Всемирной паутине]], клиенты, а также промежуточные узлы, могут выполнять [[кэширование]] ответов сервера. Ответы сервера, в свою очередь, должны иметь явное или неявное обозначение как кэшируемые или некэшируемые с целью предотвращения получения клиентами устаревших или неверных данных в ответ на последующие запросы. Правильное использование кэширования способно полностью или частично устранить некоторые клиент-серверные взаимодействия, ещё больше повышая производительность и расширяемость системы. === 4. Единообразие интерфейса === Наличие унифицированного интерфейса является фундаментальным требованием дизайна REST-сервисов<ref name="Fielding-Ch5" />. Унифицированные интерфейсы позволяют каждому из сервисов развиваться независимо. К унифицированным интерфейсам предъявляются следующие четыре ограничительных условия{{sfn|Wilde, Pautasso|2011|loc=REST Definition}}<ref>''Н. Л. Подколодный, А. В. Семенычев, Д. А. Рассказов, В. Г. Боровский, Е. А. Ананько, Е. В. Игнатьева, Н. Н. Подколодная, О. А. Подколодная, Н. А. Колчанов'' Распределённая система RESTful-web-сервисов для реконструкции и анализа генных сетей. Вавиловский журнал генетики и селекции, т. 16, N 4/1, 2012<!-- удачный перевод терминологии --></ref>: '''Идентификация ресурсов''' * Все ресурсы идентифицируются в запросах, например, с использованием [[URI]] в интернет-системах. Ресурсы концептуально отделены от представлений, которые возвращаются клиентам. Например, [[Сервер (программное обеспечение)|сервер]] может отсылать данные из [[База данных|базы данных]] в виде [[HTML]], [[XML]] или [[JSON]], ни один из которых не является типом хранения внутри сервера. '''Манипуляция ресурсами через представление''' * Если клиент хранит представление ресурса, включая метаданные — он обладает достаточной информацией для модификации или удаления ресурса. '''«Самоописываемые» сообщения''' * Каждое сообщение содержит достаточно информации, чтобы понять, каким образом его обрабатывать. К примеру, обработчик сообщения (parser), необходимый для извлечения данных, может быть указан в [[Список MIME-типов|списке MIME-типов]]<ref name="Fielding-Ch5" />. '''Гипермедиа как средство изменения состояния приложения ([[HATEOAS]])''' * Клиенты изменяют состояние системы только через действия, которые динамически определены в гипермедиа на сервере (к примеру, [[Гиперссылка|гиперссылки]] в [[гипертекст]]е). Исключая простые точки входа в приложение, клиент не может предположить, что доступна какая-то операция над каким-то ресурсом, если не получил информацию об этом в предыдущих запросах к серверу. Не существует универсального формата для предоставления ссылок между ресурсами, RFC 5988 и [https://tools.ietf.org/id/draft-kelly-json-hal-03.txt JSON Hypermedia API Language] являются двумя популярными форматами предоставления ссылок в REST HYPERMEDIA сервисах. === 5. Слои === Клиент обычно не способен точно определить, взаимодействует он напрямую с [[Сервер приложений|сервером]] или же с промежуточным узлом, в связи с иерархической структурой сетей (подразумевая, что такая структура образует [[Иерархия|слои]]). Применение промежуточных серверов способно повысить масштабируемость за счёт [[Балансировка нагрузки|балансировки нагрузки]] и распределённого [[Кэширование|кэширования]]. Промежуточные узлы также могут подчиняться [[Политика безопасности|политике безопасности]] с целью обеспечения [[Конфиденциальная информация|конфиденциальности информации]]<ref>{{Статья|автор=Hartley Brody|заглавие=How HTTPS Secures Connections: What Every Web Dev Should Know|ссылка=https://blog.hartleybrody.com/https-certificates/|язык=en|издание=|тип=|год=|месяц=|число=|том=|номер=|страницы=|issn=}}</ref>. === 6. Код по требованию (необязательное ограничение) === {{Нет источников в разделе|дата=2017-03-16}} REST может позволить расширить функциональность клиента за счёт загрузки кода с сервера в виде [[апплет]]ов или [[Сценарный язык|сценариев]]. Филдинг утверждает, что дополнительное ограничение позволяет проектировать архитектуру, поддерживающую желаемую функциональность в общем случае, но, возможно, за исключением некоторых контекстов. == Преимущества == Филдинг указывал, что приложения, не соответствующие приведённым условиям, не могут называться REST-приложениями. Если же все условия соблюдены, то, по его мнению, приложение получит следующие преимущества<ref name="Fielding-Ch5"/><ref name="SOAwithREST" />: * Надёжность (за счёт отсутствия необходимости сохранять информацию о состоянии клиента, которая может быть утеряна); * Производительность (за счёт использования кэша); * Масштабируемость; * Прозрачность системы взаимодействия (особенно необходимая для приложений обслуживания [[Вычислительная сеть|сети]]); * Простота [[интерфейс]]ов; * Портативность компонентов; * Лёгкость внесения изменений; * Способность [[Эволюция|эволюционировать]], приспосабливаясь к новым требованиям (на примере [[Всемирная паутина|Всемирной паутины]]). == Примечания == {{примечания}} == Литература == * {{книга | автор = Erik Wilde, Cesare Pautasso | заглавие = REST: From Research to Practice | издательство = Springer Science & Business Media | год = 2011 | isbn = 978-1-4419-8303-9 | allpages = 528 | ref = Wilde, Pautasso }} == Ссылки == * {{cite web|url=http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm |title=Architectural Styles and the Design of Network-based Software Architectures |author=Roy Fielding |accessdate=2009-02-20 |date=2000 |lang=en |archiveurl=https://www.webcitation.org/67gOwyTek?url=http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm |archivedate=2012-05-15 }} * {{cite web|url=http://www.jopera.org/docs/publications/2008/restws |title=RESTful Web Services vs. Big Web Services: Making the Right Architectural Decision |author=Cesare Pautasso |coauthors=Olaf Zimmerman; Frank Leymann |publisher=17th International World Wide Web Conference (WWW2008) |accessdate=2009-02-20 |lang=en |archiveurl=https://www.webcitation.org/67gOxPVRw?url=http://www.jopera.org/docs/publications/2008/restws |archivedate=2012-05-15 }} * {{cite web|url=http://msdn.microsoft.com/ru-ru/magazine/dd315413.aspx |title=Введение в службы RESTful с использованием WCF |author=Джон Фландерс |publisher=MSDN Magazine |accessdate=2009-02-20 |date=2009-01 |archiveurl=https://www.webcitation.org/67gOy2qOM?url=http://msdn.microsoft.com/ru-ru/magazine/dd315413.aspx |archivedate=2012-05-15 }} * {{cite web|url=http://www.ibm.com/developerworks/library/ws-restful/|title=RESTful Web services: The basics|author=Alex Rodriguez|accessdate=2015-12-15|lang=en|publisher=IBM}} * {{cite web|url=http://www.restapitutorial.com/|title=REST API Tutorial|author=Todd Fredrich|accessdate=2016-10-27|lang=en}} {{Внешние ссылки}} [[Категория:Архитектура программного обеспечения]] [[Категория:Веб 2.0]] [[Категория:Веб-программирование]] [[Категория:Всемирная паутина]]'
Вики-текст новой страницы после правки (new_wikitext)
''''REST''' (от {{lang-en|'''Re'''presentational '''S'''tate '''T'''ransfer}} — «передача состояния представления») — [[Архитектура программного обеспечения|архитектурный стиль]] взаимодействия компонентов распределённого приложения в [[вычислительная сеть|сети]]. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой [[гипермедиа]]-системы. В определённых случаях ([[интернет-магазин]]ы, [[Поисковая система|поисковые системы]], прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры. В широком смысле{{уточнить}} компоненты в REST взаимодействуют наподобие взаимодействия клиентов и серверов во [[Всемирная паутина|Всемирной паутине]]. REST является альтернативой [[Удалённый вызов процедур|RPC]]<ref>{{книга|автор=Машнин Тимур Сергеевич|заглавие=Технология Web-сервисов платформы Java|издательство=БХВ-Петербург|год=2012|страницы=115|страниц=560|isbn=978-5-9775-0778-3|ответственный=|издание=|место=|isbn2=}}</ref>. В сети [[Интернет]] [[Удалённый вызов процедур|вызов удалённой процедуры]] может представлять собой обычный [[HTTP]]-запрос (обычно [[HTTP|GET]] или [[POST (HTTP)|POST]]; такой запрос называют ''«REST-запрос»''), а необходимые данные передаются в качестве [[параметр]]ов запроса<ref name="Fielding-Ch5" /><ref name=autogenerated1>{{cite web|url=http://tech.groups.yahoo.com/group/rest-discuss/message/6735 |title=Fielding discussing the definition of the REST term |publisher=Tech.groups.yahoo.com |accessdate=2013-11-28}}</ref>. Для [[веб-служба|веб-служб]], построенных с учётом REST (то есть не нарушающих накладываемых им ограничений), применяют термин «'''RESTful'''». В отличие от веб-сервисов (веб-служб) на основе [[SOAP]], не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST является '''архитектурным стилем''', в то время как SOAP является протоколом. Несмотря на то, что REST не является стандартом сам по себе, большинство RESTful-реализаций используют такие стандарты, как [[HTTP]], [[URL]], [[JSON]] и [[XML]]. wadawdawdd == История термина == Хотя данная [[концепция]] лежит в самой основе [[Всемирная паутина|Всемирной паутины]], термин «REST» был введён {{нп2|Филдинг, Рой Томас|Роем Филдингом|en|Roy Fielding}}, одним из создателей протокола «[[HTTP]]», лишь в 2000 году<ref name=autogenerated1 />. В своей диссертации ''«Архитектурные стили и дизайн сетевых программных архитектур» («Architectural Styles and the Design of Network-based Software Architectures»)''<ref>{{Cite web|accessdate = 2015-12-01|title = Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST)|url = http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm|publisher = www.ics.uci.edu}}</ref> в [[Калифорнийский университет в Ирвайне|Калифорнийском университете в Ирвайне]]<ref name="Fielding-Ch5">Chapter 5 of Roy Fielding’s dissertation [http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm «Representational State Transfer (REST)»]</ref> он подвёл теоретическую основу под способ взаимодействия [[Клиент (информатика)|клиентов]] и [[Сервер (программное обеспечение)|серверов]] во [[Всемирная паутина|Всемирной паутине]], абстрагировав его и назвав «передачей представительного состояния» («Representational State Transfer'''»'''). Филдинг описал концепцию построения распределённого приложения, при которой каждый запрос (REST-запрос) клиента к серверу содержит в себе исчерпывающую информацию о желаемом ответе сервера (желаемом представительном состоянии), и сервер не обязан сохранять информацию о состоянии клиента («клиентской сессии»). Стиль «REST» развивался параллельно с «[[HTTP 1.1]]», разработанным в 1996—1999 годах, основываясь на существующем дизайне «[[HTTP]] 1.0», разработанном в [[1996 год]]у<ref>{{Cite web|accessdate = 2015-12-01 |date = 2009-11-11 |title = rest-discuss : Message: Re: [rest-discuss] RFC for REST? |url = http://tech.groups.yahoo.com/group/rest-discuss/message/6757 |archiveurl = https://web.archive.org/web/20091111012314/http://tech.groups.yahoo.com/group/rest-discuss/message/6757 |archivedate = 2009-11-11 }}</ref>. == Свойства Архитектуры REST == Свойства архитектуры, которые зависят от ограничений, наложенных на REST-системы: * Производительность — взаимодействие компонентов системы может являться доминирующим фактором производительности и эффективности сети с точки зрения пользователя; * Масштабируемость для обеспечения большого числа компонентов и взаимодействий компонентов. Рой Филдинг — один из главных авторов спецификации протокола HTTP, описывает влияние архитектуры REST на масштабируемость следующим образом: * Простота унифицированного интерфейса; * Открытость компонентов к возможным изменениям для удовлетворения изменяющихся потребностей (даже при работающем приложении); * Прозрачность связей между компонентами системы для сервисных служб; * Переносимость компонентов системы путем перемещения программного кода вместе с данными; * Надёжность, выражающаяся в устойчивости к отказам на уровне системы при наличии отказов отдельных компонентов, соединений или данных.<ref name="Fielding-Ch5" /> == Требования к архитектуре REST == Существует '''шесть''' обязательных ограничений для построения распределённых REST-приложений по Филдингу<ref name="Fielding-Ch5" /><ref name="SOAwithREST">{{книга|автор=Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian|часть=5.1|заглавие=SOA with REST|издательство=Prentice Hall|год=2013|isbn=978-0-13-701251-0}}</ref>. Выполнение этих ограничительных требований обязательно для REST-систем<ref name="SOA with REST">{{книга |заглавие=SOA with REST |год=2013 |издательство=[[Prentice Hall]] |isbn=978-0-13-701251-0 |часть=5.1 |язык=und |автор=Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian |ответственный=Thomas Erl}}</ref><ref name="Richardson 2007">{{Citation|last1=Richardson|first1=Leonard|title=RESTful Web service|year=2007|publisher=O'Reilly Media|isbn=978-0-596-52926-0|url=https://books.google.com/books?id=XUaErakHsoAC|first2=Sam|last2=Ruby|accessdate=18 January 2011|quote=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.}}</ref>. Накладываемые ограничения определяют работу сервера в том, как он может обрабатывать и отвечать на запросы клиентов. Действуя в рамках этих ограничений, система приобретает такие желательные свойства как производительность, масштабируемость, простота, способность к изменениям, переносимость, отслеживаемость и надёжность. Если сервис-приложение нарушает ''любое'' из этих ограничительных условий, данную систему нельзя считать REST-системой<ref name="Fielding-Ch5" />. Обязательными условиями-ограничениями являются: === 1. Модель клиент-сервер === Первым ограничением, применимым к гибридной модели, является приведение архитектуры к модели клиент-сервер. Разграничение потребностей является принципом, лежащим в основе данного накладываемого ограничения. Отделение потребности интерфейса [[Клиент (информатика)|клиента]] от потребностей [[Сервер (приложение)|сервера, хранящего данные]], повышает переносимость [[Программный код|кода]] клиентского [[интерфейс]]а на другие платформы, а упрощение [[Сервер (приложение)|серверной части]] улучшает масштабируемость. Наибольшее же влияние на [[Всемирная паутина|всемирную паутину]], пожалуй, имеет само разграничение, которое позволяет отдельным частям развиваться независимо друг от друга, поддерживая потребности в развитии интернета со стороны различных организаций.<ref name="Fielding-Ch5" /> === 2. Отсутствие состояния === Протокол взаимодействия между клиентом и сервером требует соблюдения следующего условия: в период между запросами клиента никакая информация о ''состоянии'' клиента на сервере не хранится ([[Протокол без сохранения состояния|Stateless protocol]] или «протокол без сохранения состояния»). Все запросы от клиента должны быть составлены так, чтобы сервер получил всю необходимую информацию для выполнения запроса. ''Состояние'' сессии при этом сохраняется на стороне клиента<ref name="Fielding-Ch5"/>. Информация о состоянии сессии может быть передана сервером какому-либо другому сервису (например, в службу базы данных) для поддержания устойчивого состояния, например, на период установления аутентификации. Клиент инициирует отправку запросов, когда он готов (возникает необходимость) перейти в новое состояние. Во время обработки клиентских запросов считается, что клиент находится в ''переходном состоянии''. Каждое отдельное ''состояние'' приложения представлено связями, которые могут быть задействованы при следующем обращении клиента. === 3. Кэширование === {{Нет источников в разделе|дата=2017-03-16}} Как и во [[Всемирная паутина|Всемирной паутине]], клиенты, а также промежуточные узлы, могут выполнять [[кэширование]] ответов сервера. Ответы сервера, в свою очередь, должны иметь явное или неявное обозначение как кэшируемые или некэшируемые с целью предотвращения получения клиентами устаревших или неверных данных в ответ на последующие запросы. Правильное использование кэширования способно полностью или частично устранить некоторые клиент-серверные взаимодействия, ещё больше повышая производительность и расширяемость системы. === 4. Единообразие интерфейса === Наличие унифицированного интерфейса является фундаментальным требованием дизайна REST-сервисов<ref name="Fielding-Ch5" />. Унифицированные интерфейсы позволяют каждому из сервисов развиваться независимо. К унифицированным интерфейсам предъявляются следующие четыре ограничительных условия{{sfn|Wilde, Pautasso|2011|loc=REST Definition}}<ref>''Н. Л. Подколодный, А. В. Семенычев, Д. А. Рассказов, В. Г. Боровский, Е. А. Ананько, Е. В. Игнатьева, Н. Н. Подколодная, О. А. Подколодная, Н. А. Колчанов'' Распределённая система RESTful-web-сервисов для реконструкции и анализа генных сетей. Вавиловский журнал генетики и селекции, т. 16, N 4/1, 2012<!-- удачный перевод терминологии --></ref>: '''Идентификация ресурсов''' * Все ресурсы идентифицируются в запросах, например, с использованием [[URI]] в интернет-системах. Ресурсы концептуально отделены от представлений, которые возвращаются клиентам. Например, [[Сервер (программное обеспечение)|сервер]] может отсылать данные из [[База данных|базы данных]] в виде [[HTML]], [[XML]] или [[JSON]], ни один из которых не является типом хранения внутри сервера. '''Манипуляция ресурсами через представление''' * Если клиент хранит представление ресурса, включая метаданные — он обладает достаточной информацией для модификации или удаления ресурса. '''«Самоописываемые» сообщения''' * Каждое сообщение содержит достаточно информации, чтобы понять, каким образом его обрабатывать. К примеру, обработчик сообщения (parser), необходимый для извлечения данных, может быть указан в [[Список MIME-типов|списке MIME-типов]]<ref name="Fielding-Ch5" />. '''Гипермедиа как средство изменения состояния приложения ([[HATEOAS]])''' * Клиенты изменяют состояние системы только через действия, которые динамически определены в гипермедиа на сервере (к примеру, [[Гиперссылка|гиперссылки]] в [[гипертекст]]е). Исключая простые точки входа в приложение, клиент не может предположить, что доступна какая-то операция над каким-то ресурсом, если не получил информацию об этом в предыдущих запросах к серверу. Не существует универсального формата для предоставления ссылок между ресурсами, RFC 5988 и [https://tools.ietf.org/id/draft-kelly-json-hal-03.txt JSON Hypermedia API Language] являются двумя популярными форматами предоставления ссылок в REST HYPERMEDIA сервисах. === 5. Слои === Клиент обычно не способен точно определить, взаимодействует он напрямую с [[Сервер приложений|сервером]] или же с промежуточным узлом, в связи с иерархической структурой сетей (подразумевая, что такая структура образует [[Иерархия|слои]]). Применение промежуточных серверов способно повысить масштабируемость за счёт [[Балансировка нагрузки|балансировки нагрузки]] и распределённого [[Кэширование|кэширования]]. Промежуточные узлы также могут подчиняться [[Политика безопасности|политике безопасности]] с целью обеспечения [[Конфиденциальная информация|конфиденциальности информации]]<ref>{{Статья|автор=Hartley Brody|заглавие=How HTTPS Secures Connections: What Every Web Dev Should Know|ссылка=https://blog.hartleybrody.com/https-certificates/|язык=en|издание=|тип=|год=|месяц=|число=|том=|номер=|страницы=|issn=}}</ref>. === 6. Код по требованию (необязательное ограничение) === {{Нет источников в разделе|дата=2017-03-16}} REST может позволить расширить функциональность клиента за счёт загрузки кода с сервера в виде [[апплет]]ов или [[Сценарный язык|сценариев]]. Филдинг утверждает, что дополнительное ограничение позволяет проектировать архитектуру, поддерживающую желаемую функциональность в общем случае, но, возможно, за исключением некоторых контекстов. == Преимущества == Филдинг указывал, что приложения, не соответствующие приведённым условиям, не могут называться REST-приложениями. Если же все условия соблюдены, то, по его мнению, приложение получит следующие преимущества<ref name="Fielding-Ch5"/><ref name="SOAwithREST" />: * Надёжность (за счёт отсутствия необходимости сохранять информацию о состоянии клиента, которая может быть утеряна); * Производительность (за счёт использования кэша); * Масштабируемость; * Прозрачность системы взаимодействия (особенно необходимая для приложений обслуживания [[Вычислительная сеть|сети]]); * Простота [[интерфейс]]ов; * Портативность компонентов; * Лёгкость внесения изменений; * Способность [[Эволюция|эволюционировать]], приспосабливаясь к новым требованиям (на примере [[Всемирная паутина|Всемирной паутины]]). == Примечания == {{примечания}} == Литература == * {{книга | автор = Erik Wilde, Cesare Pautasso | заглавие = REST: From Research to Practice | издательство = Springer Science & Business Media | год = 2011 | isbn = 978-1-4419-8303-9 | allpages = 528 | ref = Wilde, Pautasso }} == Ссылки == * {{cite web|url=http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm |title=Architectural Styles and the Design of Network-based Software Architectures |author=Roy Fielding |accessdate=2009-02-20 |date=2000 |lang=en |archiveurl=https://www.webcitation.org/67gOwyTek?url=http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm |archivedate=2012-05-15 }} * {{cite web|url=http://www.jopera.org/docs/publications/2008/restws |title=RESTful Web Services vs. Big Web Services: Making the Right Architectural Decision |author=Cesare Pautasso |coauthors=Olaf Zimmerman; Frank Leymann |publisher=17th International World Wide Web Conference (WWW2008) |accessdate=2009-02-20 |lang=en |archiveurl=https://www.webcitation.org/67gOxPVRw?url=http://www.jopera.org/docs/publications/2008/restws |archivedate=2012-05-15 }} * {{cite web|url=http://msdn.microsoft.com/ru-ru/magazine/dd315413.aspx |title=Введение в службы RESTful с использованием WCF |author=Джон Фландерс |publisher=MSDN Magazine |accessdate=2009-02-20 |date=2009-01 |archiveurl=https://www.webcitation.org/67gOy2qOM?url=http://msdn.microsoft.com/ru-ru/magazine/dd315413.aspx |archivedate=2012-05-15 }} * {{cite web|url=http://www.ibm.com/developerworks/library/ws-restful/|title=RESTful Web services: The basics|author=Alex Rodriguez|accessdate=2015-12-15|lang=en|publisher=IBM}} * {{cite web|url=http://www.restapitutorial.com/|title=REST API Tutorial|author=Todd Fredrich|accessdate=2016-10-27|lang=en}} {{Внешние ссылки}} [[Категория:Архитектура программного обеспечения]] [[Категория:Веб 2.0]] [[Категория:Веб-программирование]] [[Категория:Всемирная паутина]]'
Унифицированная разница изменений правки (edit_diff)
'@@ -6,4 +6,5 @@ В отличие от веб-сервисов (веб-служб) на основе [[SOAP]], не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST является '''архитектурным стилем''', в то время как SOAP является протоколом. Несмотря на то, что REST не является стандартом сам по себе, большинство RESTful-реализаций используют такие стандарты, как [[HTTP]], [[URL]], [[JSON]] и [[XML]]. +wadawdawdd == История термина == '
Новый размер страницы (new_size)
24770
Старый размер страницы (old_size)
24759
Изменение размера в правке (edit_delta)
11
Добавленные в правке строки (added_lines)
[ 0 => 'wadawdawdd' ]
Удалённые в правке строки (removed_lines)
[]
Была ли правка сделана через выходной узел сети Tor (tor_exit_node)
false
Unix-время изменения (timestamp)
1599218278