REST
Я понимаю, что основная идея REST чрезвычайно проста. Мы годами пользовались веб-браузерами и видели, насколько просты, гибки, эффективны и т. Д. Веб-сайты. HTML-сайты используют гиперссылки и формы в качестве основного средства взаимодействия с пользователем. Их главная цель - позволить нам, клиентам, знать только те ссылки, которые мы можем использовать в текущем состоянии . А REST просто говорит: «Почему бы не использовать одни и те же принципы для управления компьютером, а не людьми, через наше приложение?» Добавьте к этому мощь инфраструктуры WWW, и вы получите потрясающий инструмент для создания великолепных распределенных приложений.
Другое возможное объяснение - математически мыслящие люди. Каждое приложение в основном представляет собой конечный автомат, в котором действия бизнес-логики являются переходами состояний. Идея REST состоит в том, чтобы отобразить каждый переход на некоторый запрос к ресурсу и предоставить клиентам ссылки, представляющие переходы, доступные в текущем состоянии. Таким образом, он моделирует конечный автомат через представления и ссылки. Вот почему это называется REpresentational State Transfer.
Довольно удивительно, что все ответы сосредоточены либо на формате сообщений, либо на использовании HTTP-глаголов. На самом деле, формат сообщения вообще не имеет значения, REST может использовать любой, при условии, что разработчик сервиса документирует его. HTTP-глаголы только делают службу CRUD, но еще не RESTful. Что действительно превращает службу в службу REST, так это гиперссылки (так называемые элементы управления гипермедиа), встроенные в ответы сервера вместе с данными, и их количество должно быть достаточным, чтобы любой клиент мог выбрать следующее действие из этих ссылок.
К сожалению, довольно сложно найти правильную информацию о REST в Интернете, за исключением тезиса Роя Филдинга . (Он тот, кто получил REST). Я бы порекомендовал книгу «ОТДЫХ на практике» , поскольку в ней дано подробное пошаговое руководство по переходу от SOAP к REST.
SOAP
Это одна из возможных форм стиля архитектуры RPC (удаленного вызова процедур). По сути, это просто технология, которая позволяет клиентам вызывать методы сервера через сервисные границы (сеть, процессы и т. Д.), Как если бы они вызывали локальные методы. Конечно, он отличается от вызова локальных методов скоростью, надежностью и т. Д., Но идея в том, что все просто.
По сравнению
Такие детали, как транспортные протоколы, форматы сообщений, xsd, wsdl и т. Д., Не имеют значения при сравнении любой формы RPC с REST. Основное отличие состоит в том, что служба RPC заново изобретает велосипед, разрабатывая собственный протокол приложения в API RPC с семантикой, известной только ему. Следовательно, все клиенты должны понимать этот протокол перед использованием сервиса, и никакая общая инфраструктура, такая как кэши, не может быть построена из-за проприетарной семантики всех запросов. Кроме того, API-интерфейсы RPC не предлагают, какие действия разрешены в текущем состоянии, это должно быть получено из дополнительной документации. REST, с другой стороны, подразумевает использование унифицированных интерфейсов, позволяющих различным клиентам иметь некоторое представление о семантике API, и гипермедиа элементов управления (ссылки) для выделения доступных опций в каждом состоянии. Таким образом, он позволяет кэшировать ответы для масштабируемых сервисов и легко обнаруживать правильное использование API без дополнительной документации.
В некотором смысле, SOAP (как и любой другой RPC) представляет собой попытку туннелирования через границу службы, рассматривая соединительные среды как черный ящик, способный передавать только сообщения. REST - это решение признать, что Интернет представляет собой огромную распределенную информационную систему, принять мир таким, какой он есть, и научиться владеть им, а не бороться с ним.
SOAP, кажется, отлично подходит для внутренних сетевых API, когда вы управляете как сервером, так и клиентами, и в то время как взаимодействия не слишком сложны. Для разработчиков более естественно использовать его. Однако для общедоступного API, который используется многими независимыми сторонами, является сложным и большим, REST должен подходить лучше. Но это последнее сравнение очень нечеткое.
Обновление
Мой опыт неожиданно показал, что разработка REST сложнее, чем SOAP. По крайней мере, для .NET. Хотя существуют отличные фреймворки, такие как ASP.NET Web API, нет инструментов, которые бы автоматически генерировали прокси на стороне клиента. Ничего подобного «Добавить ссылку на веб-службу» или «Добавить ссылку на службу WCF». Нужно написать весь код сериализации и запроса сервисов вручную. И человек, это много шаблонного кода. Я думаю, что для разработки REST необходимо что-то похожее на WSDL и реализацию инструментов для каждой платформы разработки. На самом деле, кажется, что есть хорошая основа: WADL или WSDL 2.0 , но ни один из стандартов не поддерживается.
Обновление (январь 2016 г.)
Оказывается, что теперь существует широкий набор инструментов для определения REST API. Мои личные предпочтения в настоящее время RAML .
Как работают веб-сервисы
Ну, это слишком широкий вопрос, потому что он зависит от архитектуры и технологии, используемой в конкретном веб-сервисе. Но в целом, веб-сервис - это просто какое-то веб-приложение, которое может принимать запросы от клиентов и возвращать ответы. Он доступен для Интернета, поэтому это сервис web , и он обычно доступен 24/7, поэтому это сервис . Конечно, это решает некоторую проблему (иначе зачем кому-то использовать веб-сервис) для своих клиентов.