Требуется ли взаимодействие RESTful между физически отдельными клиентами и серверами? то есть взаимодействию необходимо каким-то образом связать сетевой стек? Есть ли какая-либо польза от использования HTTP-подобной «соглашения о вызове» между различными компонентами приложения?Требует ли архитектурный стиль REST физически отдельных клиентов и серверов?
Мне кажется, что преимущества REST, такие как они, почти применимы для связи между компонентами одного и того же приложения, а также для связи между физически отдельными клиентами и серверами и что REST's constraints and guiding principles может быть удовлетворен без сетевой стек. (Я не предполагаю, что для любой функции вызов «похож на HTTP» - хорошая идея, но для некоторых вызовов функций или взаимодействий может иметь смысл, чтобы взаимодействие было HTTP-подобным.)
Например , в веб-приложении может быть полезно получить доступ («внутреннюю») информацию пользователя через URL-адреса, такие как http://api.local/user/34
и «HTTP-клиент», который маршрутизирует и отправляет запросы внутренне, а не проходит через стандартный процесс маршрутизации и отправки HTTP. Вместо предоставления обычной библиотеки и связанной с ней документации разработчик пользовательского компонента предоставил бы конечные точки (ресурсы) URL, которые можно было бы манипулировать стандартными HTTP-глаголами. Поскольку разработчики уже знакомы с HTTP, потребуется меньше документации, и будет больше согласованности и единообразия между компонентами.
(Я думаю, что размышление об REST таким образом также помогает прояснить разницу между механизмами REST и RPC, такими как SOAP - нет смысла когда-либо использовать SOAP для «внутренних» вызовов, но понятное поведение и семантика REST могут сделать это полезным для «внутренних» вызовов в некоторых ситуациях. И, конечно, если вы используете REST для внутренних вызовов (REST Level 0?), тривиально преобразовать такие взаимодействия во внешние вызовы, если возникнет такая необходимость.)
Чтобы ответить на ваш вопрос, я бы сказал, что в процессе REST упрощает вашу жизнь, потому что среди других причин: (a) взаимодействия RESTful хорошо поняты и в значительной степени самодокументированы; и (б) он делает тривиальным переводить услуги из-за неудовлетворенности процесса на удаленном, если это необходимо. Я думаю, что «адресность» и «кешируемость» и преимущества применимы также к незавершенному REST для внешнего REST. (например, достаточно часто использовать memcache внутри - почему бы не сделать его участие прозрачным, если можно?) – mjs
@mjs: Точка (a) неубедительна. Функциональные вызовы также хорошо поняты, даже больше, чем REST. Точка (б) интересна; Я вижу, что это полезно, если вы можете пойти позже (или хотите смешать и сопоставить). Я не согласен с комментарием о кешировании, поскольку функция может прозрачно кэшировать результаты, если это стоит того, и мало что можно получить в раскрытии семантики кеширования в стиле HTTP. Одна область, где кэширование может помочь, - это API базы данных, но это уже не тот же сценарий (и не memcache). –
@mjs: просто для выяснения точки: причина, по которой HTTP-кэширование не приносит пользы в процессе взаимодействия клиент-сервер, заключается в том, что как только функция решает кэшировать результат, не имеет значения, возвращается ли вызывающий абонент повторно для одинаковые данные; функция просто возвращает тот же указатель при незначительной стоимости. В обычном взаимодействии HTTP/REST кэширование на стороне клиента имеет большое значение. –