Каковы преимущества переключения устаревших сервисов в стиле RPC на REST? - PullRequest
5 голосов
/ 12 мая 2011

Я поддерживаю устаревшее приложение, полное веб-сервисов в стиле RPC.Например, у нас есть следующие сервисы для создания и удаления пользователей из системы:

Клиенты называют ихуслуги путем отправки данных XML через HTTP POST.Запрос XML содержит всю информацию, необходимую серверу для обработки запроса (например, информацию аутентификации, информацию пользователя).Затем сервер отвечает XML-документом, содержащим любую информацию, о которой должен знать клиент (например, флаги успеха / сбоя и описания).

Меня интересует, какие преимущества дает переключение этих служб стиля RPC на болееОТЛИЧНАЯ архитектура.Из того, что я прочитал, это будет означать следующее:

  1. Для создания пользователей клиентам все равно потребуется отправлять данные XML через HTTP POST (или PUT в зависимости от того, знают ли они окончательный URL-адрес иесли они знают всю необходимую информацию для пользовательского ресурса).Однако информация об аутентификации будет передаваться в заголовках HTTP с использованием базовой аутентификации .
  2. Чтобы удалить пользователей, клиенты будут выполнять HTTP-вызов DELETE для https://example.com/users/{user id}.Опять же, информация аутентификации будет передаваться в заголовках HTTP, а не в теле запроса.На самом деле, насколько я могу судить, тело запроса не должно быть необходимым.
  3. Вместо того, чтобы указывать информацию об успехе / неудаче в XML-документе, сервер должен попытаться указать как можно больше через код состояния HTTP /описание состояния.

Теперь, насколько я могу судить, основные преимущества изменения этих сервисов на более RESTful-архитектуру:

  1. Мы бы использовали большечто HTTP может предложить, особенно в отношении аутентификации.
  2. URL-адреса немного более логичны, особенно если нам нужно начать выставлять ресурсы ниже уровня «пользователя» (например, https://example.com/users/{user id}/stuff).
  3. Это больше соответствует встроенной веб-архитектуре.

Я что-то упустил?Мне кажется, что при использовании архитектуры RESTful должно быть больше преимуществ.

* Обратите внимание, что когда я говорю "стиль RPC", я не имею в виду стандартизированный формат, такой как XML-RPC или SOAP.

Ответы [ 3 ]

12 голосов
/ 12 мая 2011

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

У вас есть большая клиентская база? У вас много серверов?

Ключевой атрибут (но не единственный и даже не обязательный, но ...) REST - это способ использования HTTP-кэширования.

Вы занимаетесь кэшированием? Это большое дело для вас? Это для больших систем в общедоступном интернете.

Если вы не используете кеширование и не думаете, что это принесет вам большую пользу (т. Е. У вас мало клиентов, ваши серверы не перенасыщены, ваш контент просто не подходит и т. д.), тогда REST, вероятно, даже не стоит использовать, поскольку другие преимущества гораздо менее ощутимы, чем кеширование.

Если вы просто отправляете POX (обычный XML) (или JSON) через HTTP, и это хорошо работает для вас, то я не буду об этом беспокоиться.

Есть и другие преимущества для HTTP, естественно, с его типами мультимедиа, согласованием контента, кэшированием и заголовками местоположения и т. Д. Но, если серьезно, если вы не видите, что многое делает с вашим API, не беспокойтесь.

Если кеширование помогло бы вам, то стоит перейти к более полному охвату протокола и стека HTTP, но для этого нет причин переходить к архитектуре REST. Кэшированный POX через HTTP тоже не REST. Это ... POX через HTTP.

Это все, что SOAP и XML-RPC - это ... POX поверх HTTP, только в SOAP XML есть несколько очень толстых стандартов ...

Если вы - огромная сервисная организация с 10-летним планом, то вы можете подумать о переходе на полноценную REST-архитектуру, поскольку это реальное место в мире - долгосрочные, большие системы.

Но это реальная попытка реинжиниринга пойти по этому пути.

Addenda:

Одной из проблем, которую пытается решить REST, является соединение систем.

Системы RPC, как правило, довольно сильно связаны.

Таким образом, по мере роста систем эта связь становится тормозом эволюции системы.

Рассмотрим две крайности MS Windows и Linux. Microsoft тратит много времени на попытки сделать MS Windows обратно совместимой для работы с устаревшим (и даже с ошибками) программным обеспечением. Это стоит им времени и денег.

Напротив, ядро ​​Linux намного более кавалернее. Когда дело доходит до ядра, они не дают никаких обещаний по поводу обратной совместимости. Linux славится тем, что он ломает драйверы и что не от релиза до релиза. Их главная спасительная милость в том, что они ничего не обещали, поэтому не расстраивайтесь, когда что-то ломается.

Это позволяет людям ядра Linux быть более креативными и двигаться быстрее, потому что они всегда могут подбрасывать и изменять вещи по мере продвижения. Это также позволяет команде быть меньше.

Теперь рассмотрим небольшую систему сервисов RPC. Поскольку они неявно тесно связаны (как это характерно для RPC), при изменении центральной службы это изменение будет распространяться на всех клиентов.

Если таких клиентов немного, и особенно если они находятся под вашим контролем (поскольку вы разрабатываете всю систему, а не компонент), масштаб изменений не обязательно будет болезненным и разрушительным.

Но вы можете видеть, что если у вас были тысячи клиентов и / или клиентов, которых вы не контролируете, внедряя спецификации, внесение изменений в основные службы может иметь серьезные последствия. Черт возьми, я послал людям исходный код, и они все еще не правы.

REST помогает отделить системы, используя стандартные типы мультимедиа (то есть не какой-то XML, который вы бросили на доску за один день), HTTP-протокол (вам не нужен HTTP, чтобы иметь REST-арку, но это в значительной степени дано сегодня), и HATEOS.

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

Классический пример - вы (клиент), делающий покупки Amazon. Все, что вам известно, - это нажать кнопку «Оформить заказ», но вы не знаете, по какому URL перейти. Этот URL может быть зафиксирован в камне, он может меняться каждую секунду, он может даже привести к тому, что вас перенаправит. ВЫ не знаете и не заботитесь. Это прерогатива серверов.

Итак, будучи клиентом, вы знаете, как «щелкнуть извлечение» (т. Е. Перейти по ссылке в самой последней полезной нагрузке с пометкой «оформить заказ»), но вы действительно не знаете намного больше. Примечательно, что у вас нет жестко закодированного http://amazon.com/checkout" в вашем приложении.

Не вдаваясь в подробности того, как использование этих концепций уменьшает связность, на данном этапе просто соглашайтесь с тем, что они делают, и, уменьшая связность, вы, как поставщик услуг, получаете более простой механизм для расширения, добавления и изменения служб, а в качестве службы. Потребитель, вы можете сфокусировать свою систему на тех аспектах услуги, которые вас особенно интересуют, даже если за вашей спиной меняются некоторые детали. Опять же, подумайте, насколько Amazon изменился за эти годы, но, по крайней мере, мы все знаем, где находится кнопка «Оформить заказ».

Но написание подобных сервисов и создание таких клиентов - это совсем немного работы. Некоторые из механизмов «просты», потому что «мы делаем это все время» (например, раздача ответов HTML, кто этого не делает?). Но больший объем работы с типами мультимедиа, облегчение изменений и эволюции, а также обеспечение надежности и дружественности ваших услуг и клиентов к этой среде. Это все требует работы, потому что выгоды не сразу понял.

«Почему мы делаем все это для службы, которая никогда не изменится?»

"Потому что никогда не приходит раньше, чем вы думаете."

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

Имейте в виду, это резко контрастирует с "не создавайте его, если он вам не нужен", "гибким", мы можем просто добавить это позже "мышление.

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

Надеюсь, это поможет.

4 голосов
/ 12 мая 2011

Хмммм ...

Основное преимущество REST ... ну, на самом деле это не прямое преимущество REST как архитектуры, но сопутствующее преимущество - это обеспечение лучшей связи сваши ресурсы, чтобы разблокировать их от закрытых протоколов связи.Интерфейс REST облегчает подключение, благодаря повсеместной модели.

То, что REST «отражает архитектуру сети», приятно, но не имеет практического применения.Главное - двигаться в мир, где «может подключиться что угодно (должным образом авторизованное)», или, может быть, более уместно, где любой разработчик знает, как написать программу, которая подключается.

Любой разработчик, любая система, любое приложение, любая платформа, любое устройство.Посмотрите на множество приложений Facebook, приложений Twitter и так далее.Сделать это проще для разработчиков.

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

Итак, REST, для меня, это то, что вы делаете, чтобы раскрыть свои хорошие вещи с помощью веб-протоколовдля максимально широкой аудитории.

2 голосов
/ 12 мая 2011

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

Другими словами, ваш верный корреспондент не покупает аргументы, обычно выдвигаемые в пользу полной теории REST 'Fielding Thesis' Hypermedia-uber-alles - выражая весь протокол как набор HTTP-транзакций, которые даже не являются слегка похожий на RPC.

однако использование гораздо более простых протоколов, основанных на http и json, для предоставления RPC API, которые Рой Филдинг расценивает как не совсем REST, имеет некоторые серьезные достоинства. Полный стек SOAP-y-веб-сервисов - гигантская вещь, несущая тонну глупого багажа XML, оставшегося от идеи, что веб-сервис определяется как произвольно сложный XML-документ, а не как набор логических параметров. "Отдыхающие" службы "Mere-RPC" избегают всего этого.

...