Warum Webservices anstelle des direkten Zugriffs auf eine relationale Datenbank für eine Android-App verwenden?

19

Ich suchte im Internet nach einer Möglichkeit, effizient auf eine zentrale Datenbank an einem entfernten Standort zuzugreifen, und fand Vorschläge zur Verwendung von Webdiensten anstelle eines direkten Zugriffs (z. B. JDBC usw.) auf eine Datenbank. Ich frage mich, warum und aus welchen Gründen .

jaildal
quelle

Antworten:

25

Durch Hinzufügen einer Webserviceschicht erhalten Sie die Möglichkeit, Ihren Client sowohl hinsichtlich der erforderlichen CPU-Leistung als auch der während der Verarbeitung verwendeten Bandbreite zu vereinfachen. Beide Faktoren sind für Endbenutzer äußerst wichtig:

  • Durch die Verwendung von weniger CPU wird die Akkulaufzeit verlängert.
  • Durch die Verwendung einer geringeren Bandbreite werden die monatlichen Zahlungen für Benutzer mit Nutzungskontrollplänen reduziert

Durch die Einführung einer Webanwendungsebene verlagern Sie den Großteil der Verarbeitung von einem mobilen Handheld-Client mit geringem Stromverbrauch, geringer Bandbreite und geringem Arbeitsspeicher auf einen angeschlossenen Server mit hoher Leistung und hoher Bandbreite, der über mehr Arbeitsspeicher verfügt Anforderungen - eine Umgebung, in der Verarbeitung und Kommunikation nur einen Bruchteil der Kosten eines Kunden kosten.

Aber warten Sie, es ist auch etwas für Sie dabei: Durch die Aufteilung des Systems erhalten Sie mehr Kontrolle über Ihre Geschäftsregeln, die Struktur Ihrer Datenbank und die Versionen dessen, was da draußen ist. Sobald Sie einen mobilen Client direkt mit der Datenbank verbinden lassen, ist Ihr Design mit dieser Datenbankstruktur "verheiratet": Fast jede Änderung würde die Abwärtskompatibilität mit einem Client aufheben, der möglicherweise ein Upgrade seiner App nicht durchführen möchte.

Im Gegensatz dazu können Sie durch Hinzufügen eines dazwischen liegenden Webdienstes die Benutzeroberfläche für mobile Clients auf übersichtlichere Weise weiterentwickeln: Sie können beispielsweise die alte Benutzeroberfläche beibehalten, eine neue hinzufügen, die "parallel" dazu funktioniert, und dann vollständig Restrukturieren Sie Ihre Datenbank, ohne einen einzelnen Client zu beschädigen.

Wenn Sie beim Entwerfen Ihres Webdienstes einigen ziemlich grundlegenden Entwurfsprinzipien folgen, können Sie auch erhebliche Vorteile erzielen, wenn Sie die vorhandene ausgereifte serverseitige Infrastruktur wiederverwenden: Beispielsweise können Sie Cache- und Proxy-Dienste kostenlos erhalten.

Auf diese Weise können andere Entwickler Ihre Anwendung Plattformen aussetzen, die Sie selbst nicht bedienen können, und letztendlich zum Vorteil Ihres Unternehmens beitragen.

dasblinkenlight
quelle
1
"sowohl in Bezug auf die erforderliche CPU-Leistung als auch die während der Verarbeitung verwendete Bandbreite" war der Schlüsselpunkt, den ich suchte. Danke
yesildal,
4
Wenn Ihre App direkt mit der Datenbank kommuniziert, sind Sie nur ein Reverse-Compiler, der davon entfernt ist, dass jemand jede Tabelle in Ihrer Datenbank löscht. Mit einer Web-App können Sie viel feiner steuern und
solche
1
@Earlz: Nicht, dass ich das jemals für eine Webanwendung tun würde, aber die meisten Datenbankserver verfügen über solide und fein abgestimmte Berechtigungen. Keine Entschuldigung für einen Webbenutzer mit Drop-Table-Berechtigungen.
Wyatt Barnett
1
@WyattBarnett ok ... ohne gespeicherte Prozeduren und dergleichen, wie würden Sie einem Benutzer erlauben, sein Benutzerprofil zu aktualisieren? Lese- / Schreibberechtigung für die USERS-Tabelle ... Was würde sie daran hindern, Zeilen zu löschen oder zu bearbeiten, die ihnen nicht gehören ... oder sogar Zeilen zu lesen, die ihnen nicht gehören. Ich bin mir ziemlich sicher, dass kein Datenbankserver ohne gespeicherte Prozeduren oder
ähnliches
@Earlz - keine, die mir bekannt ist, aber das ist nichts anderes als der Punkt - warum sprechen Sie direkt mit Ihrer Datenbank und ignorieren absichtlich Datenbankfunktionen, um dies zu verbessern? Und würden Sie auf diese Weise etwas profilzentriertes tun und ein Update durchführen?
Wyatt Barnett
13

Es setzt eine Abstraktionsebene zwischen der App und der DB. Das bringt Ihnen viele Vorteile wie:

  • Beschränken des Zugriffs auf die Datenbank auf die Teile, die die App benötigt. Dies vereinfacht den Code der App und schützt Ihre Datenbank.
  • Beeinträchtigt die innere Funktionsweise der Datenbank. Wenn Sie sich später entschließen, Ihr Schema, Ihre Abfragen oder sogar Ihre gesamte Datenbank zu ändern, wird die Verknüpfung zu Ihrer App nicht unterbrochen, solange Sie die mittlere Ebene korrekt verwalten.
  • Sie können damit Funktionen hinzufügen, die außerhalb des Bereichs einer Datenbank liegen. Zwischenspeichern von Daten, die zum Beispiel ziemlich konstant sind. Geschäftsregeln sind ein weiterer Teil, der sollte von der DB auseinander.
System aus
quelle
1
Ein weiterer Vorteil ist, dass Sie einen Cache entweder clientseitig oder serverseitig (oder für beide Zwecke) hinzufügen können.
TMN
@TMN - Guter Punkt!
System aus
Okay, aber diese Fakten gelten auch für alle Arten von Webanwendungen, oder? Erhöht das Einfügen einer Ebene (von Webdiensten) die Reaktionszeit für eine mobile App, von der eine schnelle Reaktion erwartet wird?
Jaildal
1
@yesildal - Ja, sie sind noch gültig. Tatsächlich gelten sie für alle Arten von Anwendungen. In Webanwendungen müssen Sie sich jedoch nicht an die Verwendung von Webdiensten halten, sondern können diese Funktionen einfach (beispielsweise) in einer eigenen Assembly isolieren. Der Grund für die Verwendung von Webdiensten für Remote-Apps (z. B. Telefon-Apps) liegt darin, dass sich der DB-Server nicht in unmittelbarer Nähe befindet.
System Down
@yesildal - re Leistung: nicht wirklich, wenn Sie 1 Benutzer haben, dann ja, es wird eine zusätzliche Verzögerung bei der Rückgabe des Ergebnisses geben, aber wenn Sie eine Million Benutzer haben, sind die Dinge anders und die Aufteilung des Codes in 2 Server kann das bewirken Gesamtleistung schneller.
gbjbaanb
4

Ein weiterer Grund, die DB nicht direkt auszusetzen - Transport. Die meisten relationalen Datenbanken, die Art von Dingen, mit denen man mit JDBC spricht, sind im Allgemeinen nicht für das öffentliche Internet konzipiert. Drahtloses Internet ist ein schrecklich unzuverlässiges Ende des öffentlichen Internets. Die Ausnahmebehandlung wäre ein Albtraum und Sie würden wahrscheinlich die Umkehrung der Webserviceschicht in Ihre App schreiben, um den Verlust von Transaktionen zu vermeiden.

Es gibt einige neuere Arten von Datenbanken, die HTTP sprechen und für diese Art von Dingen geeignet sein könnten. Sie bieten auch Möglichkeiten, Anwendungscode in die Datenbank einzufügen. Vielleicht möchten Sie auf CouchDb oder RavenDb achten - beides sind Dokument-Datenbanken mit Karten- / Reduzierungsfunktionen, die über json und http funktionieren, ähnlich wie bei vielen modernen Webdiensten.

Wyatt Barnett
quelle