дано распределенное веб приложение на нескольких машинах
каковы плюсы и минусы RPC в сравнении с REST в такой архитектуре?
в данном случае под RPC имеется в виду следующее
в сообщение пакуется название вызываемого компонента, метод который нужно вызвать, данные для метода, и всякие параметры окружения, которое нужно создать на др конце перед вызовом
затем сообщение отпровляется в сериализованном виде в единую точку входа на др конце
сам я вижу такие минусы
— проблемы с тестированием, это будет сложнее делать
— больше проблем с безопасностью
REST лучше. Принципиально подходы ничем не отличаются: в обоих случаях решаются задачи аутентификации клиента, авторизации выполнения запроса, маршрутизации запроса по URI, разбора переданной модели данных и т.п.
Разница в том, что в случае с REST у вас есть развитая инфраструктура решения этих задач, потому что все эти операции стандартизованы на уровне HTTP протокола и вам не нужно изобретать велосипеды.
Вы спокойно можете вынести безопасность и часть маршрутизации в API Gateway сторонних производителей, оставшуюся маршрутизацию возьмет на себя веб-сервер, а вам нужно только реализовать логику обработки конкретных запросов.
Здравствуйте, developer999999, Вы писали:
D>дано распределенное веб приложение на нескольких машинах D>каковы плюсы и минусы RPC в сравнении с REST в такой архитектуре? http://rsdn.ru/rsdnsearch/design?text=RPC%20vs%20REST
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
D>>дано распределенное веб приложение на нескольких машинах D>>каковы плюсы и минусы RPC в сравнении с REST в такой архитектуре? S>http://rsdn.ru/rsdnsearch/design?text=RPC%20vs%20REST
Вот известный пример — поднять зп всем сотрудникам на 10%. Как это делать через REST ?
В RPC все просто — SetSalary(Employe.All, Money.Percents(110))
И на сервер уходит практически то же самое.
А вот с REST чего будет ?
Здравствуйте, Ikemefula, Вы писали: I>Вот известный пример — поднять зп всем сотрудникам на 10%. Как это делать через REST ? I>В RPC все просто — SetSalary(Employe.All, Money.Percents(110)) I>И на сервер уходит практически то же самое. I>А вот с REST чего будет ?
Нюансы зависят от того, как именно спроектирована топология сервиса. Либо бежим по сотрудникам и делаем PUT, либо делаем POST на "SalaryChangeOrder" со списком сотрудников, который уже на стороне сервиса процессится нужным нам образом.
Второй способ лучше. Ваш RPC-код во-первых не работает — потому, что не бывает задачи "поднять зарплату прямо сейчас". Всегда делается "поднять с 1го числа следующего месяца", или ещё как-то — т.е. есть effective date, иначе у нас нет способа проверить корректность начисления зарплаты за предыдущие месяцы.
Во-вторых он не работает — потому что если клиент получил таймаут, то у него нет способа узнать, повысили зарплату или нет. Повторный вызов рискует поднять зарплату на 21%.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.