Введение

Архитектурный стиль для клиент-серверных приложений

REST (Representational State Transfer – представительное состояние передачи) – это архитектурный стиль программного обеспечения, разработанный для управления проектированием и разработкой архитектуры Всемирной паутины. REST определяет набор ограничений, описывающих поведение архитектуры распределенной гипермедиа-системы интернет-масштаба, такой как Веб. Архитектурный стиль REST делает акцент на единообразных интерфейсах, независимом развертывании компонентов, масштабируемости взаимодействий между ними и создании многоуровневой архитектуры для повышения эффективности кэширования, снижения воспринимаемой пользователем задержки, обеспечения безопасности и инкапсуляции устаревших систем. REST широко используется в индустрии программного обеспечения для создания надежных, без сохранения состояния веб-приложений. Приложение, соответствующее архитектурным ограничениям REST, может быть неформально описано как RESTful, хотя этот термин чаще ассоциируется с разработкой HTTP-API и общепринятыми лучшими практиками в отношении "глаголов" (HTTP-методов), на которые реагирует ресурс, что мало связано с первоначальной формулировкой REST и часто даже противоречит этой концепции.

Принцип

Термин «передача состояния представления» был введен и определен в 2000 году ученым-компьютерщиком Роем Филдингом в его докторской диссертации. Это означает, что сервер будет отвечать представлением ресурса (в настоящее время это чаще всего HTML, XML или JSON документ), и этот ресурс будет содержать гипермедийные ссылки, переходя по которым можно изменить состояние системы. Любой такой запрос, в свою очередь, получит представление ресурса, и так далее. Важным следствием является то, что необходимо знать только идентификатор первого запрошенного ресурса, а все остальные идентификаторы будут обнаружены в процессе работы. Это означает, что эти идентификаторы могут меняться без необходимости предварительного уведомления клиента и что между клиентом и сервером существует слабая связанность.

История

Веб начал входить в повседневное использование в 1993–1994 годах, когда стали появляться веб-сайты общего назначения. В то время существовало лишь фрагментарное описание архитектуры Веба, и в отрасли ощущалось давление с целью согласования единых стандартов для протоколов веб-интерфейсов. Например, в протокол обмена данными (HTTP) было добавлено несколько экспериментальных расширений для поддержки прокси-серверов, и предлагались новые расширения, но возникла потребность в формальной веб-архитектуре, которая позволила бы оценить влияние этих изменений. Рабочие группы W3C и IETF совместно приступили к разработке формальных описаний трех основных стандартов Веба: URI, HTTP и HTML. Рой Филдинг принимал участие в создании этих стандартов (в частности, HTTP 1.0 и 1.1, а также URI), и в течение следующих шести лет он разработал архитектурный стиль REST, проверяя его ограничения на протокольных стандартах Веба и используя его как инструмент для определения архитектурных улучшений и выявления архитектурных несоответствий. Филдинг определил REST в своей докторской диссертации 2000 года "Архитектурные стили и проектирование программных архитектур, основанных на сетях" в UC Irvine. Для создания архитектурного стиля REST Филдинг выявил требования, применимые при создании приложения, основанного на глобальной сети, такие как необходимость низкого порога входа для обеспечения широкого распространения. Он также изучил множество существующих архитектурных стилей для сетевых приложений, определив, какие функции являются общими для других стилей, такие как кэширование и клиент-серверная архитектура, а какие уникальны для REST, например, концепция ресурсов. Филдинг стремился как классифицировать существующую архитектуру текущей реализации, так и определить, какие аспекты следует считать ключевыми для поведенческих и эксплуатационных требований Веба. По своей природе архитектурные стили независимы от какой-либо конкретной реализации, и хотя REST был создан в рамках разработки веб-стандартов, реализация Веба не всегда соответствует всем ограничениям архитектурного стиля REST. Несоответствия могут возникать из-за незнания или упущения, но наличие архитектурного стиля REST позволяет выявлять их до того, как они будут стандартизированы. Например, Филдинг определил встраивание информации о сессии в URI как нарушение ограничений REST, которое может негативно сказаться на совместном кэшировании и масштабируемости сервера. HTTP-куки также нарушают ограничения REST, поскольку они могут рассинхронизироваться с состоянием приложения в браузере, что делает их ненадежными; кроме того, они содержат непрозрачные данные, которые могут вызывать опасения в отношении конфиденциальности и безопасности.

Единый интерфейс

Ограничение единого интерфейса фундаментально для проектирования любой RESTful-системы.