En general, RPC ofrece mucha más integración de lenguaje que REST. Como mencionó, esto viene con una serie de problemas en términos de escala, manejo de errores, seguridad de tipos, etc., especialmente cuando un solo sistema distribuido involucra múltiples hosts que ejecutan código escrito en múltiples idiomas. Sin embargo, después de haber escrito sistemas empresariales que usan RPC, REST e incluso ambos simultáneamente, descubrí que hay algunas buenas razones para elegir RPC en lugar de REST en ciertos casos.
Estos son los casos en los que he encontrado que RPC encaja mejor:
- Acoplamiento apretado. Los componentes (distribuidos) del sistema están diseñados para trabajar juntos, y cambiar uno probablemente afectará a todos los demás. Es poco probable que los componentes tengan que adaptarse para comunicarse con otros sistemas en el futuro.
- Comunicación confiable Los componentes se comunicarán entre sí, ya sea completamente en el mismo host o en una red que es poco probable que experimente problemas de latencia, pérdida de paquetes, etc. (Sin embargo, esto todavía significa que necesita diseñar su sistema para manejar estos casos).
- Lenguaje uniforme Todos los componentes (o casi todos) se escribirán en un solo idioma. Es poco probable que en el futuro se agreguen componentes adicionales escritos en un idioma diferente.
Con respecto al punto sobre IDL, en un sistema REST también debe escribir código que convierta los datos en las solicitudes y respuestas REST a cualquier representación interna de datos que esté utilizando. Las fuentes IDL (con buenos comentarios) también pueden servir como documentación de la interfaz, que debe escribirse y mantenerse por separado para una API REST.
Los tres elementos anteriores a menudo ocurren cuando está buscando construir un componente de un sistema más grande. En mi experiencia, estos componentes son a menudo aquellos en los que sus subsistemas necesitan fallar independientemente y no causar la falla total de otros subsistemas o de todo el componente. Muchos sistemas están escritos en Erlang para lograr estos objetivos también, y en algunos casos Erlang puede ser una mejor opción que escribir un sistema en otro idioma y usar RPC solo para obtener estos beneficios.
Como la mayoría de los problemas de ingeniería, no existe una solución única para el problema de la comunicación entre procesos. Debe mirar el sistema que está diseñando y elegir la mejor opción para su caso de uso.