автомат. При доступе к странице отображаемые данные представляют текущее состояние этих
данных. Пользователь может иметь возможность изменять это состояние, обновляя поля
формы через операцию POST или переходя к другой странице, используя ссылки, включенные
в текущую страницу. Сервис, использующий REST, работает по такой же схеме в том смысле,
что приложение может осуществлять операцию GET над ресурсом для получения его текущего
состояния, менять состояние ресурса с помощью операции PUT или переходить к другому
ресурсу, используя ссылки, предоставляемые текущим ресурсом.
В сервисах, поддерживающих REST, имеется и состояние приложения, и состояние ресурса.
Клиент сохраняет состояние всего приложения, тогда как на сервере хранится только
состояние ресурса. Каждый запрос клиента к серверу должен включать все необходимые
серверу данные для полного понимания данного запроса. Иначе говоря, клиент должен
передавать в запросе все данные, касающиеся состояния приложения. Затем, на основании
ответов сервера, клиент может принимать решения о том, как изменять состояние ресурса.
Передача состояния приложения при каждом запросе обеспечивает возможность
масштабирования приложения, поскольку в этом случае можно добавлять множество
идентичных Веб-серверов и балансировать нагрузку таким образом, что клиенту нет
необходимости привязываться к одному конкретному серверу или состоянию любого
совместно используемого приложения.
REST-сервис обладает качествами безопасности и идемпотентности. Безопасность означает
способность многократно повторять запрос и получать один и тот же результат без каких-либо
побочных эффектов. Под идемпотентностью подразумевается такое поведение, когда
многократное повторение вызова приводит к тем же результатам, что и однократный вызов.
Эти качества повышают устойчивость к ошибкам и надежность, потому что, даже несмотря на
ненадежность HTTP, вы можете безопасно повторять запрос, если сервис не отвечает или
возвращает ошибку.
При проектировании REST-ресурсов руководствуйтесь следующими рекомендациями:
Используйте диаграмму состояния для моделирования и описания ресурсов, которые
будет поддерживать REST-сервис. Не используйте состояние сеанса в REST-сервисе.
Выработайте подход для идентификации ресурсов. Хорошей практикой является
использование значимых имен начальных точек и уникальных идентификаторов REST
в качестве части общего пути конкретных экземпляров ресурсов. Избегайте
включения действий в URI с помощью значений QueryString.
Определитесь с тем, должны ли поддерживаться несколько реализаций для разных
ресурсов. Например, решите, должен ли ресурс поддерживать формат XML, Atom или
JavaScript Object Notation (JSON), и сделайте его частью запроса к ресурсу. Ресурс
может предоставляться и как (например) http://www.contoso.com/example.atom, и
как http://www.contoso.com/example.json. Не используйте значения QueryString для
определения действий с URI. Все действия должны основываться на HTTP-операции,
выполняемой по отношению к URI.
Не злоупотребляйте операцией POST. Хорошей практикой является использование
конкретных HTTP-операций, таких как PUT или DELETE, это обеспечит создание
дизайна на основе ресурсов и использование унифицированного интерфейса.