Sécurité. Vous n'accordez l'accès à la base de données à personne, sauf à l'utilisateur du serveur Web / de l'application.
Ceci est très important lorsque vous avez des tonnes d'utilisateurs. Vous évitez la douleur de la maintenance des utilisateurs / rôles côté DB.
Réduction de la charge DB. Le service Web peut mettre en cache les données qu'il a extraites de la base de données.
Regroupement des connexions à la base de données (hat / tip @Dogs).
Un service Web peut utiliser un petit pool de connexions DB ouvertes en permanence. L'aide de différentes manières:
Capacité de tolérance aux pannes - le service peut basculer entre les sources de données principales / DR sans que les détails du basculement soient mis en œuvre par les consommateurs de services.
Évolutivité - le service peut répartir les demandes entre plusieurs sources de données parallèles sans que les détails de la sélection des ressources soient mis en œuvre par les consommateurs de services.
Encapsulation. Vous pouvez modifier l'implémentation de base de données sous-jacente sans affecter les utilisateurs du service.
L'enrichissement des données (cela comprend tout, de la personnalisation du client à la localisation en passant par l'internalisation). En gros, n'importe lequel de ces éléments peut être utile, mais n'importe lequel d'entre eux représente une charge majeure sur la base de données et est souvent très difficile à implémenter dans une base de données.
Peut s'appliquer ou non à vous - certaines décisions d'architecture ne sont pas compatibles avec l'accès à la base de données. Par exemple, les serveurs Java fonctionnant sous Unix ont un accès facile à une base de données, alors qu'un client Java fonctionnant sur un PC Windows ne connaît pas la base de données et vous ne le souhaitez pas.
Portabilité. Vos clients peuvent ne pas tous être sur la même plateforme / architecture / langue. Recréer une bonne couche d'accès aux données dans chacun de ceux-ci est plus difficile (car cela doit prendre en compte des problèmes tels que les basculements mentionnés ci-dessus / etc ...) que de créer une couche consommateur pour un service Web.
L'optimisation des performances. En supposant que l'alternative soit que les clients exécutent leurs propres requêtes (et non des procédures stockées prédéfinies), vous pouvez être sûr à 100% qu'ils commenceront à utiliser des requêtes moins qu'optimales. En outre, si le service Web limite l'ensemble des requêtes autorisées, il peut vous aider considérablement à régler votre base de données. Je dois ajouter que cette logique est également applicable aux procédures stockées, pas uniquement aux services Web.
Une bonne liste peut également être trouvée sur cette page: 'Encapsulation de l'accès aux bases de données: une "meilleure" pratique Agile "
Pour être parfaitement clair, certains de ces problèmes peuvent ne pas s'appliquer à TOUTES les situations. Certaines personnes ne se soucient pas de la portabilité. Certaines personnes n'ont pas à se soucier de la sécurité de la base de données. Certaines personnes n'ont pas à se soucier de l'évolutivité de la base de données.
À mon avis, vous ne devriez pas exposer automatiquement votre base de données en tant que service Web. S'il s'avère que vous avez besoin d'un service pour exposer vos données, écrivez-en un, mais tous les accès à la base de données ne doivent pas être effectués via des services Web.
la source
La plupart de ces points concernent toute API formelle, pas spécifiquement les services Web.
la source
L'écriture d'un service Web qui encapsule simplement les appels à des procédures stockées semble être une approche erronée pour concevoir une bonne DAL. Plus que probablement, vos procédures stockées sont du code hérité laissé par d'anciens systèmes client-serveur, c'est-à-dire que les règles métier sont enfouies dans les SP. Si tel est le cas, vous essayez vraiment de créer un sac à main en soie à partir de l'oreille d'une truie.
De plus, vous ajoutez une couche de protocole de message SOAP qui ajoute un coup de performance aux applications Web qui ont été `` contraintes '' à sortir avec ce `` cochon ''. Je travaille actuellement sur un projet où notre nouvelle application MVC-4 a été chargée d'utiliser un tel DAL. Nous avons le fardeau de devoir changer à la fois la signature WebMethod et la signature SP chaque fois qu'une nouvelle user story survient et nécessite de tels changements; ce qui pour nous, c'est chaque sprint. Une telle approche de relais est inhérente à deux niveaux étroitement couplés.
la source
1) Le mal de tête lié à la maintenance de la base de données est réduit du côté des développeurs afin qu'ils puissent se concentrer uniquement sur le développement.
2) Le service Web prend en charge la communication de différentes plates-formes (systèmes d'exploitation comme Windows, iOS, Android, etc.) dans une méthode très simple et efficace. par exemple, considérons une situation où une application Android et une application ios veulent communiquer avec un site Web basé sur Java, de sorte que pour la communication des trois choses, le service Web est la meilleure solution au lieu de maintenir trois bases de données différentes.
la source
En général
Je suis juste en train de commencer avec ASP.NET Web Api et je prévois de créer d'abord des services de données.
Je me suis récemment concentré sur les applications Web .NET MVC avec l'utilisation du framework d'entité.
Je me suis récemment retrouvé dans une situation frustrante avec une application Web MVC que je construisais à l'origine sur la base de procédures stockées Oracle. La version originale comme Oracle 9 ou même antérieure qui présentait un autre problème avec Visual Studio 2012 poussant une approche de fabrique de connexions plus moderne avec des assemblys de temps de chargement trouvant les bons fichiers dll à utiliser en fonction des connexions de configuration Web et des noms TNS.
Les tentatives de connexion à la base de données ont échoué avec des messages d'erreur «non pris en charge». Par curiosité, j'ai téléchargé Oracle 12c et établi des connexions au niveau de l'application qui fonctionnaient bien avec mes noms TNS et la DLL d'assemblage de charge et j'ai pu travailler avec Oracle sans problème.
Certains services Web créés fonctionnaient avec des connexions à l'ancienne version d'Oracle. Ils ont été construits avec des méthodes spécifiquement mappées sur des tables sélectionnées, à ma grande déception. Je devrais écrire le mien.
On m'a dit que le groupe responsable de la maintenance des bases de données Oracle écrirait de nouvelles procédures stockées pour remplacer les anciennes que j'utilisais pour résumer l'interface client et les couches de logique métier.
Donc, mes premières réflexions ont été que toutes les demandes de données courantes telles que le remplissage de la liste déroulante ou l'auto-complétion avec des données à l'échelle de l'entreprise soient effectuées via des services de données qui appelleraient les procédures stockées Oracle. Pourquoi répéter ce processus sur chaque application et que chaque développeur se débat avec la configuration et l'assemblage de version / charge, les problèmes de TNS?
alors....
Je suis un développeur / analyste d'applications et non un DBA, donc mon point de vue est basé sur l'expérience avec la frustration sans fin de devoir constamment modifier les applications lorsque les outils de base de données évoluent.
la source