¿Por qué usar servicios (REST / SOAP) en lugar de una biblioteca?
22
Digamos que está buscando dividir sus aplicaciones en servicios. ¿Hay alguna buena razón para adoptar un enfoque SOA en lugar de crear una API de biblioteca que las aplicaciones que la necesitan puedan cargar?
Hola Nate, lee Stent's Google Platforms Rant , proporciona excelentes ideas sobre la pregunta de plataforma (servicios) frente a producto (biblioteca) ...
Yannis
Respuestas:
11
La diferencia puede ser sutil entre ambos. Por ejemplo, en el mundo .NET, es posible que tenga una aplicación que parezca monolítica para un usuario final y que funcione en una misma máquina, pero en el interior, se separe en un montón de servicios WCF. También puede tener arquitecturas donde las bibliotecas no están fuertemente vinculadas (complementos / complementos) y solo están siguiendo un protocolo cuando se hablan entre sí.
Si evitamos hablar de esos casos intermediarios y tratamos solo con una biblioteca API fuertemente vinculada frente a un servicio REST separado, entonces puede considerar los siguientes puntos:
Se llama a una API de biblioteca en la misma máquina. Los servicios se pueden alojar en cualquier lugar y se puede llamar desde cualquier lugar. Si cuenta el alojamiento de la aplicación en varias máquinas por razones de rendimiento / escalabilidad / seguridad, es probable que necesite usar los servicios.
La situación es similar cuando se trata de usar un servicio por una aplicación implementada en varias máquinas. Por ejemplo, si está haciendo una aplicación para un banco que está haciendo algunos cálculos financieros, una forma es implementar la aplicación completa completa en cada escritorio y verse obligado a realizar actualizaciones de gran tamaño a cada cliente cada vez; otro enfoque sería alojar la parte de cómputo en los servidores e implementar en los escritorios solo una aplicación liviana con solo una interfaz de usuario y un montón de llamadas a esos servidores.
Si aloja un servicio REST, cualquiera puede usarlo: un usuario de Mac, una persona que usa Linux, etc. Si ha creado una biblioteca C # con Visual Studio y la distribuye como una DLL, olvídese de los usuarios (clientes ?) que no tienen Windows.
Otra ventaja de los servicios es que cuando actualiza el servicio, se implementa inmediatamente a todos los consumidores del servicio. Entonces, si solucionó un error o un problema de rendimiento, todos obtienen el beneficio tan pronto como el servicio actualizado se active, en lugar de tener que distribuir una actualización que la gente puede optar por ignorar.
Es cierto, pero esto también puede ser una desventaja. Cuando realiza un cambio en un servicio del que dependen varias aplicaciones, puede interrumpir inesperadamente la funcionalidad en una o muchas de esas aplicaciones. Esto no es para ahuyentar a nadie de los servicios, solo tenga en cuenta que debe asegurarse de que todos los consumidores del servicio aún trabajen cada vez que cambie un servicio. Aún mejor es dejar los métodos de servicio heredados solos una vez que se hayan implementado y crear nuevos métodos cuando necesite cambiar la implementación.
Lews Therin
8
Ventajas de la biblioteca:
Menos gastos generales por llamada (solo salto o incluso en línea ) = puede aumentar el rendimiento
El "código nativo" realmente no tiene sentido aquí: a) un servicio también puede usar "código nativo", yb) la compilación justo a tiempo a menudo proporciona el mismo rendimiento que el código nativo.
sleske
Punto a favor. A lo que me refiero cuando digo "código nativo" es que una biblioteca es una llamada "en proceso". No hay sobrecarga de la capa de servicio (por ejemplo, HTTP si se hace una llamada a la API web)
Cory House
Sí, la sobrecarga de la llamada debería ser más baja. Me tomé la libertad de editar su respuesta, para reemplazar la mención de "código nativo" con "menor sobrecarga de llamadas". Siéntete libre de volver a editar si no estás de acuerdo :-).
sleske
Lo que me gusta agregar es el uso de transacciones . Por lo general, es mucho más difícil hacer que las transacciones funcionen más allá de los límites del servicio, que en una biblioteca compartida.
c_mart
2
Un enfoque SOA permite que los diversos servicios se alojen y mantengan por separado. Además del código, la implementación de un servicio en particular puede requerir mucha configuración especial (contraseñas, puertos, certificados, etc.). El consumo de un servicio REST tiene una cantidad finita de complejidad que se puede documentar claramente y comprender fácilmente. También es más seguro porque significa que no necesita otorgar acceso a bases de datos u otros recursos a los clientes.
Si hay un cambio en un servicio SOA, entonces ese servicio SOA tendrá que ser reconstruido, reexaminado y redistribuido. Todas las aplicaciones que consumen ese servicio pueden continuar haciéndolo. Un cambio a una biblioteca en una DLL significará que todos los consumidores de esa biblioteca tendrán que volver a desarrollarse para hacer referencia a esa DLL, todos tendrán que volver a probarse y todos tendrán que volver a implementarse. También existe el peligro de que esto no suceda correctamente, y diferentes aplicaciones tendrán diferentes versiones de la DLL. A veces, esto podría no ser un problema - quizás cada sistema debe tener la versión de la biblioteca que estaba presente en el momento del despliegue (es posible que haya actualizado su sistema de registro para tener nuevas características útiles - usted realmente¿necesita actualizar todos los sistemas con él?) en este caso, una biblioteca está bien. Pero supongamos que tiene un servicio para calcular la tasa de impuestos, y las leyes fiscales cambian. No desea tener que actualizar todos los sistemas para incorporar este cambio, sería mejor hacerlo en un solo lugar. En este caso, un servicio es una mejor opción.
Hay varias buenas respuestas, pero me gustaría agregar más cosas a las respuestas dadas:
El método de la biblioteca API es muy útil cuando desea interactuar con cosas con la menor sobrecarga posible. La consecuencia es que existe un mayor acoplamiento entre API y las aplicaciones que lo utilizan. A veces, esto está bien para la aplicación e incluso es necesario, sin embargo, si tiene un sistema muy distribuido o cree que la interoperabilidad es un gran problema, es posible que deba avanzar un paso más adelante y utilizar otras formas de comunicación. Especialmente, si desea tener un sistema distribuido, SOAP es una especie de siguiente paso en SOA, pero aún tendrá la dependencia entre las unidades, ya que deben conocer los procedimientos de cada uno. REST lo lleva a un nuevo nivel, al permitir que una máquina aprenda algo sobre el contenido de los otros servicios de manera unificada.
En su caso, si su aplicación no se distribuye, no veo ninguna razón para transformar su aplicación en SOA.
Respuestas:
La diferencia puede ser sutil entre ambos. Por ejemplo, en el mundo .NET, es posible que tenga una aplicación que parezca monolítica para un usuario final y que funcione en una misma máquina, pero en el interior, se separe en un montón de servicios WCF. También puede tener arquitecturas donde las bibliotecas no están fuertemente vinculadas (complementos / complementos) y solo están siguiendo un protocolo cuando se hablan entre sí.
Si evitamos hablar de esos casos intermediarios y tratamos solo con una biblioteca API fuertemente vinculada frente a un servicio REST separado, entonces puede considerar los siguientes puntos:
Se llama a una API de biblioteca en la misma máquina. Los servicios se pueden alojar en cualquier lugar y se puede llamar desde cualquier lugar. Si cuenta el alojamiento de la aplicación en varias máquinas por razones de rendimiento / escalabilidad / seguridad, es probable que necesite usar los servicios.
La situación es similar cuando se trata de usar un servicio por una aplicación implementada en varias máquinas. Por ejemplo, si está haciendo una aplicación para un banco que está haciendo algunos cálculos financieros, una forma es implementar la aplicación completa completa en cada escritorio y verse obligado a realizar actualizaciones de gran tamaño a cada cliente cada vez; otro enfoque sería alojar la parte de cómputo en los servidores e implementar en los escritorios solo una aplicación liviana con solo una interfaz de usuario y un montón de llamadas a esos servidores.
Si aloja un servicio REST, cualquiera puede usarlo: un usuario de Mac, una persona que usa Linux, etc. Si ha creado una biblioteca C # con Visual Studio y la distribuye como una DLL, olvídese de los usuarios (clientes ?) que no tienen Windows.
fuente
Otra ventaja de los servicios es que cuando actualiza el servicio, se implementa inmediatamente a todos los consumidores del servicio. Entonces, si solucionó un error o un problema de rendimiento, todos obtienen el beneficio tan pronto como el servicio actualizado se active, en lugar de tener que distribuir una actualización que la gente puede optar por ignorar.
fuente
Ventajas de la biblioteca:
Ventajas de servicio:
fuente
Un enfoque SOA permite que los diversos servicios se alojen y mantengan por separado. Además del código, la implementación de un servicio en particular puede requerir mucha configuración especial (contraseñas, puertos, certificados, etc.). El consumo de un servicio REST tiene una cantidad finita de complejidad que se puede documentar claramente y comprender fácilmente. También es más seguro porque significa que no necesita otorgar acceso a bases de datos u otros recursos a los clientes.
fuente
Si hay un cambio en un servicio SOA, entonces ese servicio SOA tendrá que ser reconstruido, reexaminado y redistribuido. Todas las aplicaciones que consumen ese servicio pueden continuar haciéndolo. Un cambio a una biblioteca en una DLL significará que todos los consumidores de esa biblioteca tendrán que volver a desarrollarse para hacer referencia a esa DLL, todos tendrán que volver a probarse y todos tendrán que volver a implementarse. También existe el peligro de que esto no suceda correctamente, y diferentes aplicaciones tendrán diferentes versiones de la DLL. A veces, esto podría no ser un problema - quizás cada sistema debe tener la versión de la biblioteca que estaba presente en el momento del despliegue (es posible que haya actualizado su sistema de registro para tener nuevas características útiles - usted realmente¿necesita actualizar todos los sistemas con él?) en este caso, una biblioteca está bien. Pero supongamos que tiene un servicio para calcular la tasa de impuestos, y las leyes fiscales cambian. No desea tener que actualizar todos los sistemas para incorporar este cambio, sería mejor hacerlo en un solo lugar. En este caso, un servicio es una mejor opción.
fuente
Hay varias buenas respuestas, pero me gustaría agregar más cosas a las respuestas dadas:
El método de la biblioteca API es muy útil cuando desea interactuar con cosas con la menor sobrecarga posible. La consecuencia es que existe un mayor acoplamiento entre API y las aplicaciones que lo utilizan. A veces, esto está bien para la aplicación e incluso es necesario, sin embargo, si tiene un sistema muy distribuido o cree que la interoperabilidad es un gran problema, es posible que deba avanzar un paso más adelante y utilizar otras formas de comunicación. Especialmente, si desea tener un sistema distribuido, SOAP es una especie de siguiente paso en SOA, pero aún tendrá la dependencia entre las unidades, ya que deben conocer los procedimientos de cada uno. REST lo lleva a un nuevo nivel, al permitir que una máquina aprenda algo sobre el contenido de los otros servicios de manera unificada.
En su caso, si su aplicación no se distribuye, no veo ninguna razón para transformar su aplicación en SOA.
fuente