Ogólnie rzecz biorąc, RPC oferuje znacznie więcej integracji językowej niż REST. Jak już wspomniałeś, wiąże się to z szeregiem problemów związanych ze skalą, obsługą błędów, bezpieczeństwem typu itp., Szczególnie gdy jeden system rozproszony obejmuje wiele hostów z kodem napisanym w wielu językach. Jednak po napisaniu systemów biznesowych korzystających z RPC, REST, a nawet obu jednocześnie, odkryłem, że istnieją pewne dobre powody, aby w niektórych przypadkach wybierać RPC zamiast REST.
Oto przypadki, w których RPC jest lepszym rozwiązaniem:
- Szczelne połączenie. (Rozproszone) komponenty systemu są zaprojektowane do współpracy, a zmiana jednego prawdopodobnie wpłynie na wszystkie pozostałe. Jest mało prawdopodobne, że komponenty będą musiały zostać dostosowane w celu komunikacji z innymi systemami w przyszłości.
- Niezawodna komunikacja. Komponenty będą komunikować się ze sobą całkowicie na tym samym hoście lub w sieci, w której prawdopodobnie nie wystąpią problemy z opóźnieniami, utrata pakietów itp. (To jednak oznacza, że musisz jednak zaprojektować system tak, aby obsługiwał te przypadki).
- Jednolity język. Wszystkie (lub przeważnie wszystkie) komponenty zostaną napisane w jednym języku. Jest mało prawdopodobne, że dodatkowe komponenty napisane w innym języku zostaną dodane w przyszłości.
Jeśli chodzi o kwestię IDL, w systemie REST musisz także napisać kod, który konwertuje dane w żądaniach REST i odpowiedziach na dowolną używaną wewnętrzną reprezentację danych. Źródła IDL (z dobrymi komentarzami) mogą również służyć jako dokumentacja interfejsu, który należy napisać i utrzymywać osobno dla interfejsu API REST.
Powyższe trzy elementy często występują, gdy chcesz zbudować jeden element większego systemu. Z mojego doświadczenia wynika, że te komponenty często są tymi, w których ich podsystemy muszą być zdolne do niezależnej awarii i nie powodować całkowitej awarii innych podsystemów lub całego komponentu. Wiele systemów jest napisanych w Erlang, aby osiągnąć te cele, aw niektórych przypadkach Erlang może być lepszym wyborem niż pisanie systemu w innym języku i używanie RPC tylko w celu uzyskania tych korzyści.
Podobnie jak większość problemów inżynierskich, nie ma jednego rozwiązania problemu komunikacji między procesami. Musisz spojrzeć na projektowany system i dokonać najlepszego wyboru dla swojego przypadku użycia.