Pourquoi utiliser des services Web au lieu d'un accès direct à une base de données relationnelle pour une application Android?

19

J'ai cherché sur le Web comment accéder de manière efficace à une base de données centrale à distance et j'ai rencontré des suggestions pour utiliser des services Web à la place un accès direct (par exemple JDBC, etc.) à une base de données. Je me demande la raison de cela et toute autre suggestion .

yesildal
la source

Réponses:

25

L'ajout d'une couche de service Web vous donne la possibilité de rendre votre client plus léger, à la fois en termes de puissance CPU requise et de bande passante utilisée pendant le traitement. Les deux facteurs sont extrêmement importants pour les utilisateurs finaux:

  • L'utilisation de moins de CPU augmente la durée de vie de la batterie,
  • L'utilisation de moins de bande passante réduit les paiements mensuels pour les utilisateurs ayant des plans avec compteur

En introduisant une couche d'application Web, vous déplacez la majeure partie du traitement d'un client portable à faible consommation d'énergie, à faible bande passante et à faible mémoire vers un serveur branché, à haute puissance et à large bande passante, qui a plus de mémoire que lui. besoins - un environnement où le traitement et les communications coûtent une fraction de ce qu'ils coûtent à un client.

Mais attendez, il y a aussi quelque chose pour vous: en divisant le système, vous obtenez plus de contrôle sur vos règles métier, la structure de votre base de données et les versions de ce qui existe. Une fois que vous laissez un client mobile se connecter directement à la base de données, votre conception est "mariée" à cette structure de base de données: presque tout changement romprait la compatibilité descendante avec un client qui hésite à mettre à niveau son application.

En revanche, l'ajout d'un service Web entre les deux vous permet de faire évoluer l'interface vers les clients mobiles de manière plus gérable: par exemple, vous pouvez conserver l'ancienne interface en place, en ajouter une nouvelle qui fonctionne "en parallèle" avec elle, puis entièrement restructurez votre base de données sans casser un seul client.

Si vous suivez certains principes de conception assez basiques lors de la conception de votre service Web, vous pouvez également obtenir des avantages significatifs en réutilisant une infrastructure côté serveur mature qui a été mise en place: par exemple, vous pouvez obtenir gratuitement des services de cache et de proxy.

Enfin, cela ouvrira la porte à d'autres développeurs exposant votre application à des plates-formes que vous ne pourriez pas entretenir vous-même, jouant finalement à l'avantage de votre entreprise.

dasblinkenlight
la source
1
"à la fois en termes de puissance CPU requise et de bande passante utilisée pendant le traitement" était le point clé que je recherchais. Merci
yesildal
4
De plus, si votre application communique directement avec la base de données, vous n'êtes qu'un compilateur inversé de quelqu'un qui supprime chaque table de votre base de données. Avec une application Web, vous pouvez utiliser un contrôle beaucoup plus fin et arrêter des choses comme ça
Earlz
1
@Earlz: non pas que je le ferais volontiers pour une webapp, mais la plupart des serveurs de bases de données ont des autorisations assez solides et fines. Aucune excuse pour un utilisateur Web avec des autorisations de table de dépôt.
Wyatt Barnett
1
@WyattBarnett ok ... sans procédures stockées et autres, comment autoriseriez-vous un utilisateur à mettre à jour son profil utilisateur? autorisation de lecture / écriture sur la table USERS ... Qu'est-ce qui les empêcherait de supprimer ou de modifier des lignes qui ne sont pas les leurs ... ou même de lire des lignes qui ne sont pas les leurs. Je suis à peu près sûr qu'aucun serveur de base de données n'a ce genre de grain fin sans utiliser de procédures stockées ou autres
Earlz
@Earlz - pas que je sache, mais c'est en plus de cela - pourquoi allez-vous parler directement à votre base de données et ignorer délibérément les fonctionnalités de la base de données pour rendre cela sain d'esprit? Et feriez-vous quelque chose de centré sur le profil et mis à jour de cette façon?
Wyatt Barnett
13

Il met une couche d'abstraction entre l'application et la base de données. Cela vous donne de nombreux avantages tels que:

  • Limiter l'accès à la base de données aux seules parties dont l'application a besoin. Cela simplifie à la fois le code de l'application et protège votre base de données.
  • Résume le fonctionnement interne de la base de données, donc si vous décidez plus tard de modifier votre schéma, vos requêtes ou même votre base de données entière, le lien vers votre application n'est pas rompu tant que vous maintenez correctement la couche intermédiaire.
  • Il vous permet d'ajouter des fonctionnalités en dehors de la portée d'une base de données. Mise en cache de données assez constantes par exemple. Les règles métier sont une autre partie qui devrait être distincte de la base de données.
Système hors service
la source
1
Un autre avantage est qu'il vous permet d'ajouter un cache, côté client ou côté serveur (ou les deux, à des fins différentes).
TMN
@TMN - Bon point!
System Down
D'accord, mais ces faits sont également valables pour tout type d'applications Web, n'est-ce pas? L'insertion d'une couche (services Web) augmente-t-elle le temps de réponse d'une application mobile qui devrait répondre rapidement?
yesildal
1
@yesildal - Oui, ils sont toujours valides. En fait, ils sont valables pour tous les types d'applications. Cependant, dans les applications Web, vous n'avez pas à vous en tenir aux services Web et pouvez simplement isoler ces fonctions dans leur propre assemblage (par exemple). La raison d'utiliser des services Web pour des applications distantes (telles que des applications téléphoniques) est que le serveur de base de données n'est pas à proximité.
système le
@yesildal - re performance: pas vraiment, si vous avez 1 utilisateur, alors oui, il y aura un délai supplémentaire pour renvoyer le résultat, mais si vous avez un million d'utilisateurs, les choses sont différentes, et la division du code en 2 serveurs peut rendre le performance globale plus rapide.
gbjbaanb
4

Une autre raison de ne pas exposer directement la base de données - le transport. La plupart des bases de données relationnelles, le genre de choses avec lesquelles on discute avec JDBC, ne sont pas conçues pour l'Internet public en général. L'Internet sans fil est une fin horriblement peu fiable dudit Internet public. La gestion des exceptions serait cauchemardesque et vous finiriez probablement par écrire l'inverse de la couche de services Web dans votre application pour éviter de perdre des transactions.

Il existe de nouvelles sortes de bases de données qui parlent HTTP et pourraient convenir à ce genre de chose. Ils ont également tendance à proposer des moyens de placer des sortes de code d'application dans la base de données. Vous voudrez peut-être regarder CouchDb ou RavenDb - les deux sont des dbs de document avec des capacités de cartographie / réduction qui fonctionnent sur json et http, un peu comme de nombreux services Web modernes.

Wyatt Barnett
la source