Comments 13
клиент вызывает функцию напрямую, как если бы она была локальной
То есть, по RPC получив доступ можно вызывать любую функцию? Что с защитой в этом плане?
На фразе что "RPC бинарный, а REST текстовый" где-то вдалеке заплакали всякие SOAP и CORB'ы.
Вообще статья даже хуже, чем написал бы ChatGPT: RPC и REST это ортогональные вещи, которые (сюрприз!) могут быть реализованы в том числе посредством друг друга.
Не совсем. REST предполагает операции над ресурсами и первичны именно ресурсы, в RPC единицей является вызываемый метод. Так что все-таки это разные идеологии. Впрочем, автор статьи, конечно, ничего не знает ни о REST, ни о RPC.
А чем отличается унарный gRPC от Rest? В Rest Api у нас есть эндпоинт, который обрабаывает хендлер, то есть когда мы дергаем эндпоинт, то по сути мы запускаем функцию, которая уже дальше идет по слоям кода. С унарным gRPC также, мы дергаем функцию. Конечно, есть разница в http2, protobuf и тд. Но я про концепцию, в унарном gRPC и Rest вызывается функция)))
Что такое "унарный REST"? В концепции REST ничего такого нет.
Почитайте Филдинга. Или хотя бы Ричардсона.
REST как концепция (т.е. REST level 2 и выше) предполагает работу с ресурсами с помощью стандартных операций, там нет никаких своих функций. Можно вообще сделать маппинг HTTP verbs прямо на SQL и сделать один хендлер на множество RESTовых ресурсов и это будет вполне корректно.
В REST нет никаких функций.
Но да, часто любые вызовы по http называют REST, но это безграмотно и показывает, что автор не знает смысла используемых терминов.
Ответ: RPC (Remote Procedure Call) — это протокол, позволяющий программе на одном компьютере вызвать функцию на другом компьютере так, будто эта функция находится на первом компьютере.
Что, вот реально строго-настрого запрещено использовать RPC для информационного обмена в пределах одного хоста? Или всё-таки насчёт обязательности другого компьютера - это неоправданный перебор?
будто эта функция находится на первом компьютере.
Некорректно. Та же функция, но вызванная локально, скорее всего вернёт совсем иной результат.
Вопрос: RPC можно на фронте использовать или это чисто бэковская история?
Удалённый вызов процедур (иногда вызов удалённых процедур; RPC от англ. remote procedure call) — класс технологий, позволяющих программам вызывать функции или процедуры в другом адресном пространстве (на удалённых узлах, либо в независимой сторонней системе на том же узле). Обычно реализация RPC-технологии включает два компонента: сетевой протокол для обмена в режиме клиент-сервер и язык сериализации объектов (или структур для необъектных RPC). Различные реализации имеют отличающуюся друг от друга архитектуру и разнятся в возможностях: одни реализуют архитектуру SOA, другие — CORBA или DCOM. На транспортном уровне RPC используют в основном протоколы TCP и UDP, однако, некоторые построены на основе HTTP.
Существует множество технологий, обеспечивающих RPC, среди них:
DCE/RPC — двоичный протокол на базе различных транспортных протоколов, в том числе TCP/IP и Named Pipes из протокола SMB/CIFS;
DCOM — объектно-ориентированное расширение DCE/RPC, позволяющее передавать ссылки на объекты и вызывать методы объектов через таковые ссылки;
Microsoft RPC;
gRPC;
ZeroC ICE;
JSON-RPC — текстовый протокол на базе HTTP[1]
.NET Remoting — двоичный протокол на базе TCP, UDP, HTTP;
Java RMI — вызов удалённых методов для платформы Java[2];
SOAP — текстовый протокол на базе HTTP[3];
Sun RPC — двоичный протокол на базе TCP и UDP и XDR[4], второе название — ONC RPC[5];
XML RPC — текстовый протокол на базе HTTP[6].
Этой аббревиатуре 20+ лет, как и технологии.
MS на DCOM реализовывал как вариант.
Понимание RPC для новичков: