Программирование HTTP с использованием WCF - REST и Интернет

ОГЛАВЛЕНИЕ

REST и Интернет

При рассмотрении некоторых основных компонентов транспортного протокола HTTP выявляются некоторые важные принципы, удерживающие Интернет в виде слабо связанного единого целого. В 2000 году аспирант по имени Рой Филдинг (Roy Fielding) завершил работу над диссертацией, в которой, среди прочего, эти принципы были закодированы в виде архитектурного стиля, известного под названием REST (Representational State Transfer). (Диссертацию Роя можно найти по адресу ics.uci.edu/~fielding/pubs/dissertation/top.htm.)

В книгах, на конференциях по программному обеспечению и в кажущемся бесконечным собрании блогов архитектурный стиль REST обсуждался в мельчайших деталях. В данной статье невозможно осветить все свойства стиля, но я полагаю, что, ничем не рискуя, обсуждение можно свести к трем основным вопросам:

  • Использование URI-адресов
  • Специальные свойства HTTP GET
  • Модель данных, определяемая типом содержимого

В целях данной статьи эти вопросы будут рассматриваться с точки зрения принципов Интернета. Встраивание этих принципов в приложения приводит к значительному расширению возможностей взаимодействия и получения доступа к функциям приложений. Взаимодействие и получение доступа являются основной движущей силой большинства инициатив веб-служб. В конце концов, веб-служба фактически является способом предоставления некоторых функций посредством структурированной схемы обмена сообщениями. На самом деле, принципы Интернета (запрос и отклик HTTP) описывают подмножество возможных схем обмена сообщениями. Практически все платформы, приложения, операционные системы и пользователи понимают принципы Интернета, поэтому внедрение их в приложение веб-службы увеличивает ее достижимость и возможности взаимодействия.

Важно отметить, что принципы Интернета не уводят в тень WS-*, поскольку выбор между REST и WS-* не приводит к их взаимоисключению. Ни один, ни другой не в состоянии удовлетворить все типы требований обмена данными, поэтому я настойчиво призываю избегать исключительного применения одного из них ко всем создаваемым службам. Например, REST не очень удобен для отправки сообщений промежуточному средству, в то время как WS-* прекрасно с этим справляется. С другой стороны, приложения WS-* не очень хороши при взаимодействии с простыми клиентами типа обозревателей, но приложения REST делают это безукоризненно.