¿Por qué usar servicios web en lugar de acceso directo a una base de datos relacional para una aplicación de Android?

19

Busqué en la web cómo acceder de manera eficiente a una base de datos central en una ubicación remota y encontré sugerencias para usar servicios web en lugar de acceso directo (es decir, JDBC, etc.) a una base de datos. Me pregunto la razón de eso y cualquier otra sugerencia. .

yesildal
fuente

Respuestas:

25

Agregar una capa de servicio web le brinda la oportunidad de hacer que su cliente sea más liviano, tanto en términos de la potencia de CPU requerida como del ancho de banda utilizado durante el procesamiento. Ambos factores son extremadamente importantes para los usuarios finales:

  • Usar menos CPU aumenta la duración de la batería,
  • Usar menos ancho de banda reduce los pagos mensuales para los usuarios con planes medidos

Al introducir una capa de aplicación web, mueve la mayor parte del procesamiento de un cliente móvil portátil de baja potencia, bajo ancho de banda y poca memoria a un servidor conectado, de alta potencia y gran ancho de banda que tiene más memoria de la que posee. necesidades: un entorno en el que el procesamiento y las comunicaciones cuestan una fracción de lo que cuestan a un cliente.

Pero espere, también hay algo para usted: al dividir el sistema obtiene más control sobre las reglas de su negocio, la estructura de su base de datos y las versiones de lo que hay ahí fuera. Una vez que deja que un cliente móvil se conecte directamente a la base de datos, su diseño está "casado" con esa estructura de base de datos: casi cualquier cambio rompería la compatibilidad con un cliente que puede ser reacio a actualizar su aplicación.

Por el contrario, agregar un servicio web intermedio le permite evolucionar la interfaz para clientes móviles de maneras más manejables: por ejemplo, podría mantener la interfaz anterior en su lugar, agregar una nueva que funcione "en paralelo" con ella y luego completamente reestructurar su base de datos sin romper un solo cliente.

Si sigue algunos principios de diseño bastante básicos mientras diseña su servicio web, también podría obtener beneficios significativos al reutilizar la infraestructura madura del lado del servidor que se ha implementado: por ejemplo, puede obtener servicios de caché y proxy de forma gratuita.

Finalmente, esto abrirá la puerta a otros desarrolladores que expongan su aplicación a plataformas a las que no podría prestar servicio, en última instancia, jugando en beneficio de su empresa.

dasblinkenlight
fuente
1
"tanto en términos de la potencia de CPU requerida como del ancho de banda utilizado durante el procesamiento" fue el punto clave que estaba buscando. Gracias
yesildal
44
Además, si su aplicación se comunica directamente con la base de datos, usted es solo un compilador inverso al que alguien deja caer todas las tablas de su base de datos. Con una aplicación web, puede usar un control mucho más detallado y detener cosas así
Earlz,
1
@Earlz: no es que lo haya hecho voluntariamente por una aplicación web, pero la mayoría de los servidores de bases de datos tienen permisos bastante sólidos y detallados. No hay excusa para un usuario web con permisos para eliminar la tabla.
Wyatt Barnett
1
@WyattBarnett ok ... sin procedimientos almacenados y similares, ¿cómo permitiría a un usuario actualizar su perfil de usuario? permiso de lectura / escritura para la tabla USUARIOS ... Lo que les impediría eliminar o editar filas que no son suyas ... o incluso leer filas que no son suyas. Estoy bastante seguro de que ningún servidor de base de datos tiene este tipo de grano fino sin utilizar procedimientos almacenados o algo así
Earlz
@Earlz, no hay ninguno que yo sepa, pero eso no viene al caso, ¿por qué vas a hablar directamente con tu base de datos e ignorar deliberadamente las características de la base de datos para hacerlo cuerdo? ¿Y harías algo centrado en el perfil y actualizarías mucho de esta manera?
Wyatt Barnett
13

Pone una capa de abstracción entre la aplicación y la base de datos. Esto le brinda muchas ventajas, tales como:

  • Limitar el acceso a la base de datos solo a las partes que necesita la aplicación. Esto simplifica el código de la aplicación y mantiene segura su base de datos.
  • Resume el funcionamiento interno de la base de datos, por lo que si más tarde decidió cambiar su esquema, consultas o incluso toda su base de datos, el enlace a su aplicación no se rompe siempre que mantenga la capa intermedia correctamente.
  • Le permite agregar funcionalidad fuera del alcance de una base de datos. Almacenamiento en caché de datos que es bastante constante, por ejemplo. Las reglas de negocio son otra parte que debería estar separada de la base de datos.
Se cayó el sistema
fuente
1
Otra ventaja es que le permite agregar un caché, ya sea del lado del cliente o del servidor (o ambos, para diferentes propósitos).
TMN
@ TMN - ¡Buen punto!
Sistema inactivo
Ok, pero estos datos son válidos para cualquier tipo de aplicaciones web, ¿no es cierto? ¿Insertar una capa (servicios web) aumenta el tiempo de respuesta para una aplicación móvil que se espera que responda rápidamente?
yesildal
1
@yesildal: sí, siguen siendo válidos. De hecho, son válidos para todo tipo de aplicación. Sin embargo, en las aplicaciones web no tiene que ceñirse al uso de servicios web y simplemente puede aislar estas funciones en su propio ensamblado (por ejemplo). La razón para usar servicios web para aplicaciones remotas (como aplicaciones de teléfono) es que el servidor de base de datos no está muy cerca.
Sistema inactivo
@yesildal - re performance: no realmente, si tienes 1 usuario, entonces sí, habrá un retraso adicional para devolver el resultado, pero si tienes un millón de usuarios las cosas son diferentes, y dividir el código en 2 servidores puede hacer que el Rendimiento general más rápido.
gbjbaanb
4

Otra razón para no exponer el DB directamente: el transporte. La mayoría de las bases de datos relacionales, el tipo de cosas con las que uno habla con JDBC, no están diseñadas para la Internet pública en general. Internet inalámbrico es un final terriblemente poco confiable de dicho internet público. El manejo de excepciones sería una pesadilla y probablemente terminaría escribiendo el reverso de la capa de servicios web dentro de su aplicación para evitar perder transacciones.

Hay algunos tipos más nuevos de bases de datos que hablan HTTP y podrían ser adecuados para este tipo de cosas. También tienden a presentar formas de poner código de aplicación en la base de datos. Es posible que desee ver CouchDb o RavenDb, ambos son dbs de documentos con capacidades de mapa / reducción que funcionan sobre json y http, al igual que muchos servicios web modernos.

Wyatt Barnett
fuente