Рой Филдинг в блоге с некоторым разочарованием по поводу RPC, маскирующихся под REST .
REST требует использования гипертекста, который очень хорошо масштабируется, поскольку клиент и сервер очень слабо связаны.При использовании REST сервер может свободно изменять доступные ресурсы по своему усмотрению.За пределами того, что определяет сам REST, не существует фиксированного API.Клиенту нужно знать только начальный URI, и впоследствии он выбирает из предоставленных сервером вариантов для навигации или выполнения действий.Сервер может загрузить клиенту код, который помогает в навигации и представлении состояния.
Все это резко контрастирует с различными схемами удаленного вызова процедур (RPC), в которых клиент и сервер должны согласовать подробноепротокол, который обычно должен быть скомпилирован в оба конца (например, URI определенной формы, доступ к которым осуществляется в определенном порядке с одной стороны, SOAP / WSDL / WS * с другой).Этот подход хрупок, потому что любые изменения должны быть реализованы как на стороне сервера, так и на стороне клиента одновременно.Это быстро становится несостоятельным по мере роста количества серверов и / или клиентов.В частности, серверы страдают, потому что эволюция опубликованного API становится все сложнее с ростом популярности.
В свете этих факторов REST всегда является лучшим выбором, когда это возможно.Он обеспечивает быструю эволюцию серверов и позволяет астрономическому количеству приложений свободно взаимодействовать на специальной основе (например, весь Интернет).
Но как насчет части «когда это возможно»?REST работает лучше всего, когда в цикле есть человек.В конце концов, у человека есть все шансы сделать рациональный выбор, если ему предложен ранее неизвестный набор опций.Машины еще не там.Протоколы Web RPC были созданы именно для того, чтобы наручники обеих сторон фиксировали протокол.Это упрощает взаимодействие автоматизированных процессов, когда человек удален с картинки.RPC - это правильный выбор проекта, когда чисто автоматизированная работа важнее эволюции и масштабируемости (во времени в Интернете и в масштабе Интернета).
Масштабирование и соединение?
«Масштаб» здесь подразумевается в широком смысле.Да, включает количество пользователей и сеансов, а также размер приложения и процесс разработки.Плотное соединение представляет серьезное препятствие для размера приложения.Трудно представить существование крупнейшего известного приложения, Всемирной паутины, без чрезвычайно слабой связи, обеспечиваемой архитектурой REST.Миллионы разработчиков по всему миру объединились для создания этого приложения, которое поддерживает миллиарды пользователей.Тем не менее, разработчики делают это, оставаясь блаженно не осведомленными друг о друге (или, по крайней мере, они не знали бы друг о друге, если бы не StackOverflow;).
Основной принцип включения REST - это гипертекст.Другие элементы архитектуры существуют для поддержки этого принципа в очень широком масштабе (во всех смыслах).Является ли REST единственно возможным способом создания сети?Нет. Но это, случается, дико успешный стандарт де-факто.Это должно быть выбором по умолчанию для любого нового входа в экосистему, отбрасываемого только после тщательного и явного рассмотрения проекта.