Warum machen die Leute REST-APIs anstelle von DBALs?

32

In den letzten beiden Unternehmen habe ich REST-APIs zum Abfragen von Daten über eine Web-App verwendet. dh Anstatt die Web-App SQL direkt ausführen zu lassen, ruft sie eine REST-API auf, die SQL ausführt und das Ergebnis zurückgibt.

Meine Frage ist ... warum ist das so?

Wenn es Dritten ausgesetzt sein würde, könnte ich verstehen. Es ist besser, eine eingeschränkte REST-API bereitzustellen als die vollständige Datenbank. In beiden Unternehmen ist dies jedoch nicht der Fall.

Mir wurde vorgeschlagen, dass diese REST-APIs den Wechsel zwischen DBMSs erleichtern. Aber ist das nicht der Sinn einer Datenbankabstraktionsschicht (DBAL)? Möglicherweise verwenden Sie ein ORM als DBAL, oder Sie können einfach unformatiertes SQL schreiben und Ihre DBAL gegebenenfalls die DB-spezifischen Daten übersetzen lassen (z. B. LIMIT für MySQL nach TOP für MSSQL übersetzen).

In jedem Fall erscheint es mir unnötig. Und ich denke, das erschwert auch die Diagnose von Problemen. Wenn ein Bericht in der Web-App die falschen Zahlen enthält, können Sie die SQL-Abfrage nicht einfach ausgeben. Sie müssen die REST-URL ausgeben und dann das Projekt aufrufen, das als REST-API dient, und die SQL daraus abrufen. Es ist also eine zusätzliche Indirektionsebene, die den Diagnoseprozess verlangsamt.

neubert
quelle
3
Es hört sich so an, als hätten Sie nur mit Apps gearbeitet, die im Grunde CRUD sind - einige Benutzer geben Daten mit Formularen ein und andere Benutzer lesen die Daten mit denselben Formularen oder mit Berichtsausdrucken? Wenn Sie noch nie mit einem System gearbeitet haben, für das ein komplexes und ausgefeiltes Domänenmodell erforderlich ist, kann ich sehen, wie Sie diese bestimmte Einstellung haben würden. Viele Anwendungen erfordern diese zusätzliche Indirektionsebene, um Dinge zu erledigen.
RibaldEddie
1
Ich habe mit APIs (nicht unbedingt REST) ​​gearbeitet, die (unter anderem) Berechnungen für die Parameter durchgeführt haben, die an sie übergeben wurden. Möglicherweise wird in diesen Berechnungen ein DBMS verwendet, aber vermutlich lebt ein Großteil der Logik nicht in der DB. Die internen APIs der Unternehmen, bei denen ich gearbeitet habe, tun dies jedoch nicht. Sie fragen einfach ein DBMS ab und spucken die Ergebnisse der SQL-Abfrage wörtlich aus. Es scheint mir nur, dass REST-APIs oft (nicht immer - oft) als trendig - nicht praktisch geschrieben sind.
Neubert
1
Das REST-API-Design weist definitiv einige Besonderheiten auf, die es schwierig machen, eine komplexe Domäne gut zu entwerfen. Die meisten Entwickler, denen ich über die Jahre begegnet bin, interessieren sich nicht für das Design. Sie möchten Code so schnell wie möglich ausgeben, damit ihre Chefs sie lieben und glauben, dass sie Rockstars sind. Wenn Sie diese Tatsache mit einem Trend wie REST kombinieren, erhalten Sie eine trendige, aber unpraktische Spaghetti-API. Es hat nichts mit REST selbst zu tun.
RibaldEddie
3
Haben Sie sich jemals gefragt, wie einige Webunternehmen melden, dass ihre gesamten Benutzerdaten von einem Hacker gestohlen wurden? Hast du dich jemals gefragt, wie der Hacker das gemacht hat? Wenn Sie glauben, dass ein Webserver eine direkte Verbindung zur Datenbank hat, stellen Sie fest, dass der Angreifer nach dem Hacken des Webservers vollen und uneingeschränkten Zugriff hat, um eine beliebige Datenbank auszuwählen. Wenn Sie es hinter eine mittlere Ebene stecken, kann der Angreifer nur Methoden auf der mittleren Ebene aufrufen. Ich werde nicht sagen, dass das sofortige Sicherheit ist, aber es ist deutlich besser.
gbjbaanb
1
@gbjbaanb: Mein Punkt ist, dass der Webserver über den Restserver auf die Daten zugreifen kann. Wenn der Webserver also gehackt wird, kann der Angreifer auch über den Restserver auf die Daten zugreifen, ohne den Restserver hacken zu müssen.
JacquesB

Antworten:

28

Wenn Sie einem Client erlauben, direkt auf die Datenbank zuzugreifen, wie dies auch mit einer Datenbankabstraktionsschicht der Fall ist, gilt Folgendes:

  • Sie erhalten eine Kopplung zwischen ihrem Code und Ihrem Code - insbesondere besteht eine sehr starke Kopplung zwischen Ihrer Datenbankstruktur und ihrem Code.
  • Ihr Client kann einige unerwünschte Vorgänge in Ihrer Datenbank ausführen - ob es sich nun um die Aktualisierung von Daten handelt, die nicht erforderlich sind, eine zu zeitaufwendige Abfrage erstellt oder eine Deadlock-Funktion aktiviert, da keine sauberen Sperren vorhanden sind ...
  • Wenn Sie in Ihrer Datenbankstruktur eine weniger als optimale Auswahl getroffen haben, kann es sehr schwierig sein, diese Auswahl aufzuheben, insbesondere wenn Sie keine gute Möglichkeit haben, Ihre Clients auf neue Strukturen umzustellen.

Das heißt, ich gehe überhaupt nicht auf den REST-Teil ein. Das Isolieren Ihrer Datenbank hinter einer API ist einfach eine vernünftigere Wahl, wenn das Team, das die Datenbank verwaltet, und die Teams, die sie verwenden, nicht synchron sind, da dies diesen Teilen ermöglicht entwickeln sich in ihrem eigenen Tempo.

jhominal
quelle
24

Sie haben Recht, die Einführung einer REST-API-Schicht zwischen einer Web-App und einer Datenbank bietet keinen eindeutigen Vorteil, und es entstehen Kosten in Bezug auf Komplexität und Leistung.

Der Grund, warum Sie widersprüchliche Antworten erhalten, ist die Verwirrung darüber, was der "Client" in Ihrer Architektur ist.

In Ihrer Architektur (wenn ich das richtig verstehe) haben Sie Browser, die mit einer einzelnen Web-App interagieren, die wiederum mit der Datenbank interagiert. Die Einführung einer REST-API-Schicht zwischen der Webanwendung und der Datenbank hat keinen Vorteil. Alle angegebenen Vorteile (Zwischenspeichern, Isolieren von Datenbanken usw.) können mit Datenzugriffsschichten im Code erzielt werden.

In einigen anderen Architekturen ist eine REST-API jedoch sinnvoll:

  • Wenn mehrere Clients auf die Datenbank zugreifen, dh nicht eine einzelne Webanwendung, sondern mehrere unabhängige Webanwendungen, die auf dieselbe Datenbank zugreifen. Es kann von Vorteil sein, eine gemeinsame REST-Schnittstelle zu erstellen, um das Teilen von Datenmodellen, Zwischenspeichern usw. zu ermöglichen. Sicherlich können Sie einen Teil des Nutzens durch das Teilen derselben DAL-Bibliotheken erzielen, aber das funktioniert nicht, wenn die Apps in verschiedenen Sprachen und auf verschiedenen Sprachen entwickelt werden Plattformen. Dies ist in Unternehmenssystemen üblich.

  • Wenn Sie mehrere Desktop-Apps haben, die direkt auf die Datenbank zugreifen. Dies ist die klassische "Two-Tier" -Architektur, die im Vergleich zu Web-Apps in Ungnade gefallen ist. Durch die Einführung einer REST-Schicht können Sie die Datenzugriffslogik zentralisieren und insbesondere die Sicherheit besser kontrollieren, da es riskant ist, dass mehrere verteilte Clients direkt auf dieselbe Datenbank zugreifen.

  • Wenn Sie über JavaScript-Code verfügen, der Daten direkt vom Server abruft, benötigen Sie auf jeden Fall so etwas wie eine REST-API.

JacquesB
quelle
1
Ihre Antwort hat mir gefallen, aber ich habe noch ein paar Fragen dazu. Wie sieht es mit dem Leistungsverlust bei Einführung einer weiteren Abstraktionsebene aus? Auch macht es nicht Single Point of Failure (wenn dies ausfällt, geht alles andere aus) und möglichen Engpass (jede App wartet auf DB-Verbindung aus dem Pool)?
Sactiw
@satich: Ich verstehe nicht genau, was Sie fragen, können Sie genauer sein? Fragen Sie nach Single-Point-of-Failure mit oder ohne REST-Tier?
JacquesB
Die zusätzliche Ebene kann verwendet werden, wenn mehr als eine App mit ihr kommuniziert
Ewan,
@Ewan: Ja, das sage ich im ersten Punkt.
JacquesB
1
@JacquesB Angenommen, mehrere Web-Apps teilen sich dieselbe Datenbank, aber nicht dieselben Daten, dh jede führt CRUD-Vorgänge für einen separaten Datensatz in dieser Datenbank aus. Im Grunde gibt es keine gemeinsame Nutzung von Daten im eigentlichen Sinne. Ist es also sinnvoll, Apps hinter ein Restful Persistence Framework zu stellen (nehmen Sie auch an, dass DB ein gutes Maß an Parallelität bei Abfragen bietet)? Ist dieses Framework nicht auch ein Engpass und eine zentrale Fehlerquelle für so viele Web-Apps, die über dieses Framework interagieren?
Sactiw
12

Warnung: großer Beitrag, einige Meinungen, vage Schlussfolgerung, was für Sie am besten funktioniert

Im Allgemeinen wird dies als Mittel zum Implementieren einer "hexagonalen Architektur" in Ihrer Datenbank durchgeführt. Sie können dafür sorgen, dass Webanwendungen, mobile Anwendungen, Desktopanwendungen, Massenimporteure und Hintergrundverarbeitung Ihre Datenbank auf einheitliche Weise belegen. Sicherlich können Sie dasselbe in gewissem Maße erreichen, indem Sie eine umfangreiche Bibliothek für den Zugriff auf Ihre Datenbank schreiben und alle Ihre Prozesse diese Bibliothek verwenden lassen. Und in der Tat, wenn Sie in einem kleinen Laden mit einem sehr einfachen System sind, ist dies wahrscheinlich der bessere Weg. Es ist ein einfacherer Ansatz, und wenn Sie nicht die erweiterten Funktionen eines komplizierten Systems benötigen, warum sollten Sie dann für die Komplexität bezahlen? Wenn Sie jedoch mit einer großen, hoch entwickelten Gruppe von Systemen arbeiten, die alle in großem Maßstab mit Ihrer Datenbank interagieren müssen, gibt es

Plattformunabhängigkeit & Wartung

Wenn Sie über eine Datenbank verfügen und eine Python-Bibliothek für die Interaktion mit dieser Datenbank schreiben und jeder diese Bibliothek für die Interaktion mit der Datenbank abruft, ist das großartig. Angenommen, Sie müssen plötzlich eine mobile App schreiben und diese mobile App muss jetzt auch mit der Datenbank kommunizieren. Und Ihre iOS-Ingenieure verwenden kein Python, und Ihre Android-Ingenieure verwenden kein Python. Vielleicht wollen die iOS-Leute Apples Sprachen und die Android-Ingenieure Java verwenden. Dann müssen Sie Ihre Datenzugriffsbibliothek nicht mehr in drei verschiedenen Sprachen schreiben und verwalten. Möglicherweise entscheiden sich iOS- und Android-Entwickler für die Verwendung von Xamarin, um den Code zu maximieren, den sie gemeinsam nutzen können. Perfekt, außer dass Sie Ihre Datenzugriffsbibliothek wahrscheinlich noch nach .NET portieren müssen. Und dann hat Ihre Firma gerade eine andere Firma gekauft, die Die Webanwendung von S ist ein eigenständiges, aber verwandtes Produkt, und das Unternehmen möchte einen Teil der Daten von der Plattform Ihres Unternehmens in die Plattform der neu erworbenen Tochtergesellschaft integrieren. Es gibt nur ein Problem: Die Tochtergesellschaft war ein Start-up und beschloss, den Großteil ihrer Bewerbung in Dart zu schreiben. Außerdem hat das mobile Team, das Xamarin pilotiert hat, aus irgendeinem Grund (wahrscheinlich aus Gründen, auf die Sie keinen Einfluss haben) entschieden, dass es nicht für sie ist und dass sie lieber die Tools und Sprachen verwenden, die für die mobilen Geräte bestimmt sind, für die sie entwickelt werden. In dieser Phase hatte Ihr Team bereits einen großen Teil Ihrer Datenzugriffsbibliothek in .NET bereitgestellt, und ein anderes Team im Unternehmen schrieb verrückte Salesforce-Integrationsaufgaben und beschloss, dies alles seitdem in .NET zu tun war schon eine Datenzugriffsbibliothek für.

Aufgrund einer sehr realistischen Entwicklung haben Sie Ihre Datenzugriffsbibliothek nun in Python, .NET, Swift, Java und Dart geschrieben. Sie sind auch nicht so nett, wie Sie es gerne hätten. Sie konnten ein ORM nicht so effektiv einsetzen, wie Sie es möchten, da jede Sprache andere ORM-Tools hat. Sie mussten also mehr Code schreiben, als Sie möchten. Und Sie waren nicht in der Lage, jeder Inkarnation so viel Zeit zu widmen, wie Sie wollten, weil es 5 davon gibt. Und die Dart-Version der Bibliothek ist besonders haarig, weil Sie für einige davon Ihre eigenen Transaktionssachen rollen mussten, weil die Bibliotheken und der Support einfach nicht wirklich da waren. Sie haben versucht, den Fall zu begründen, dass die Dart-Anwendung aus diesem Grund nur Lesezugriff auf Ihre Datenbank haben sollte. Aber das Unternehmen hatte sich bereits entschieden, dass die von ihnen geplanten Funktionen den zusätzlichen Aufwand wert waren. Und es stellt sich heraus, dass einige der Validierungslogiken in all diesen Inkarnationen Ihrer Datenzugriffsbibliothek fehlerhaft sind. Jetzt müssen Sie Tests und Code schreiben, um diesen Fehler in all diesen Bibliotheken zu beheben, Codeüberprüfungen für Ihre Änderungen an all diesen Bibliotheken abrufen, QS für all diese Bibliotheken abrufen und Ihre Änderungen für alle Systeme freigeben, die alle von verwenden diese Bibliotheken. In der Zwischenzeit sind Ihre Kunden unzufrieden und haben auf Twitter gewechselt. Sie haben Kombinationen von Ungereimtheiten zusammengestellt, von denen Sie nie gedacht hätten, dass sie auf das Flaggschiffprodukt Ihres Unternehmens abzielen. Und der Produktbesitzer entscheidet sich dafür, die Situation überhaupt nicht sehr zu verstehen.

Bitte haben Sie Verständnis dafür, dass das obige Beispiel in einigen Umgebungen alles andere als erfunden ist. Bedenken Sie auch, dass sich diese Abfolge von Ereignissen im Laufe einiger Jahre entwickeln kann. Wenn Architekten und Geschäftsleute anfangen, andere Systeme an Ihre Datenbank anzuschließen, sollten Sie in der Regel eine REST-API vor die Datenbank setzen. Überlegen Sie sich, ob zu einem frühen Zeitpunkt, als klar war, dass diese Datenbank von einigen wenigen Systemen gemeinsam genutzt werden würde, ein Web-Service / eine REST-API davor gestellt wurde. Das Beheben Ihres Überprüfungsfehlers wäre viel schneller und einfacher, da Sie dies nur einmal anstatt fünfmal tun. Und die Veröffentlichung des Fixes wäre viel einfacher zu koordinieren, weil Sie

TLDR; Es ist einfacher, die Datenzugriffslogik zu zentralisieren und sehr dünne HTTP-Clients zu verwalten, als die Datenzugriffslogik an jede Anwendung zu verteilen, die auf die Daten zugreifen muss. Tatsächlich kann Ihr HTTP-Client sogar aus Metadaten generiert werden. In großen Systemen können Sie mit der REST-API weniger Code verwalten

Leistung und Skalierbarkeit

Einige Leute glauben vielleicht, dass es schneller ist, direkt mit der Datenbank zu sprechen, anstatt zuerst einen Webdienst zu durchlaufen. Wenn Sie nur eine Anwendung haben, ist das sicherlich richtig. Aber in größeren Systemen stimme ich dem Gefühl nicht zu. Irgendwann wird es auf einer gewissen Skalierungsebene sehr vorteilhaft sein, eine Art Cache vor die Datenbank zu stellen. Möglicherweise verwenden Sie den Ruhezustand und möchten ein Infinispan-Grid als L2-Cache installieren. Wenn Sie einen Cluster von 4 bulligen Servern haben, um Ihren Webdienst unabhängig von Ihren Anwendungen zu hosten, können Sie es sich leisten, eine eingebettete Topologie mit aktivierter synchroner Replikation zu haben. Wenn Sie versuchen, dies auf einem Cluster von 30 Anwendungsservern unterzubringen, ist der Aufwand für das Aktivieren der Replikation in diesem Setup zu hoch. Entweder muss Infinispan in einem verteilten Modus oder in einer dedizierten Topologie ausgeführt werden, und Hibernate muss plötzlich über das Netzwerk gehen, um aus dem Cache zu lesen. Außerdem funktioniert Infinispan nur in Java. Wenn Sie über andere Sprachen verfügen, benötigen Sie andere Caching-Lösungen. Der Netzwerkaufwand, der anfällt, um die Datenbank zu erreichen, wenn Sie von Ihrer Anwendung zu Ihrem Webdienst wechseln, wird schnell durch die Notwendigkeit kompensiert, komplexere Caching-Lösungen zu verwenden, die in der Regel mit einem eigenen Aufwand verbunden sind.

Darüber hinaus bietet diese HTTP-Ebene Ihrer REST-API einen weiteren nützlichen Caching-Mechanismus. Ihre Server für Ihre REST-API können Caching-Header in ihre Antworten einfügen, und diese Antworten können auf der Netzwerkebene zwischengespeichert werden, die sich außergewöhnlich gut skalieren lässt. In einer kleinen Konfiguration mit einem oder zwei Servern ist es am besten, einen Cache im Speicher in der Anwendung zu verwenden, wenn diese mit der Datenbank kommuniziert. In einer großen Plattform mit vielen Anwendungen, die auf vielen Servern ausgeführt werden, möchten Sie jedoch den Cache nutzen Netzwerk, um Ihr Caching zu handhaben, weil bei richtiger Konfiguration etwas wie Tintenfisch oder Lack oder Nginx auf relativ kleiner Hardware zu wahnsinnigen Ebenen skaliert werden kann. Hunderttausende oder Millionen von Anforderungen pro Sekunde Durchsatz sind in einem HTTP-Cache viel billiger als auf einem Anwendungsserver oder einer Datenbank.

Darüber hinaus können viele Clients auf Ihre Datenbank verweisen, anstatt auf einige Server, die wiederum auf die Datenbank verweisen, was das Optimieren der Datenbank und das Zusammenlegen von Verbindungen erheblich erschwert. Im Allgemeinen handelt es sich bei der tatsächlichen Arbeitslast auf einem Anwendungsserver hauptsächlich um Anwendungssachen. Das Warten auf das Zurückkommen von Daten aus der Datenbank ist oft zeitaufwändig, aber im Allgemeinen nicht sehr rechenintensiv. Sie benötigen möglicherweise 40 Server, um die Arbeitslast Ihrer Anwendung zu bewältigen, aber Sie benötigen wahrscheinlich keine 40 Server, um das Abrufen der Daten aus der Datenbank zu koordinieren. Wenn Sie diese Aufgabe einem Webdienst zuweisen, wird der Webdienst wahrscheinlich auf weitaus weniger Servern als der Rest der Anwendung ausgeführt, sodass Sie weitaus weniger Verbindungen zur Datenbank benötigen. Welches ist wichtig, weil Datenbanken in der Regel don '

TLDR; Es ist einfacher, den Datenzugriff zu optimieren, zu skalieren und zwischenzuspeichern, wenn er in einem einzigen dedizierten Webdienst stattfindet, als wenn er in vielen verschiedenen Anwendungen mit unterschiedlichen Sprachen und Technologien stattfindet

Abschließende Gedanken

Bitte kommen Sie nicht von diesem Gedanken ab "Oh wow, ich sollte immer REST-APIs verwenden, um meine Daten abzurufen " oder "Dieser Idiot versucht zu sagen, dass wir es falsch machen, weil unsere Web-App direkt mit der Datenbank kommuniziert, aber unser Zeug funktioniert gut! " . Der wichtigste Punkt, den ich ansprechen möchte, ist, dass unterschiedliche Systeme und unterschiedliche Unternehmen unterschiedliche Anforderungen haben. In vielen Fällen ist es nicht sinnvoll, eine REST-API vor Ihre Datenbank zu stellen. Es ist eine kompliziertere Architektur, die es erfordert, diese Komplexität zu rechtfertigen. Wenn die Komplexität jedoch gerechtfertigt ist, bietet die Verwendung der REST-API zahlreiche Vorteile. Es ist das, was einen guten Ingenieur auszeichnet, wenn er die unterschiedlichen Bedenken abwägt und den richtigen Ansatz für Ihr System wählt.

Wenn die REST-API das Debuggen von Dingen behindert, ist wahrscheinlich etwas in diesem Bild falsch oder nicht vorhanden. Ich glaube nicht, dass diese zusätzliche Abstraktionsebene das Debuggen wesentlich erschwert. Wenn ich mit großen n-Tier-Systemen arbeite, möchte ich sicherstellen, dass ich über einen verteilten Protokollierungskontext verfüge. Wenn ein Benutzer eine Anforderung initiiert, generieren Sie möglicherweise eine GUID für diese Anforderung und protokollieren Sie den Benutzernamen dieses Benutzers und die Anforderung, die er gestellt hat. Geben Sie diese GUID dann weiter, wenn Ihre Anwendung mit anderen Systemen kommuniziert. Mit einer ordnungsgemäßen Protokollaggregation und -indizierung können Sie die gesamte Plattform nach dem Benutzer abfragen, der das Problem meldet. Außerdem haben Sie Einblick in alle Aktionen und können schnell feststellen, wo Fehler aufgetreten sind. Wieder ist es eine kompliziertere Architektur,

Quellen: http://alistair.cockburn.us/Hexagonal+architecture https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing

Hunde
quelle
Sehr gute Antwort, lesenswert. Vielen Dank, dass Sie sich die Zeit genommen haben, diese großartige Antwort zu schreiben!
Dominic
6

Wenn ich richtig verstehe, was eine DBAL ist , können Sie über eine REST-Schnittstelle eine beliebige Sprache für ihre Clients verwenden, während eine DBAL eine Bibliothek ist, mit der Sie eine einzelne Sprache für ihre Clients verwenden können.

Dies kann wiederum ein Vorteil für ein Unternehmen sein, in dem es viele Entwicklungsteams gibt und nicht alle dieselbe Sprache beherrschen. Das direkte Abfragen der Datenbank durch ihre Software wäre in der Funktionalität gleichwertig, aber wie Sie sagen, ist es besser, eine eingeschränkte REST-API als die vollständige Datenbank bereitzustellen.

Abstrakter ausgedrückt beantworten Sie selbst die Frage:

Es ist also eine zusätzliche Indirektionsebene, die den Diagnoseprozess verlangsamt

... da es diesen berühmten Aphorismus gibt , der besagt: "Alle Probleme in der Informatik können durch eine andere Indirektionsebene gelöst werden". :)

logc
quelle
6

Nur weil Sie sich in der gleichen Firma befinden, heißt das noch lange nicht, dass Sie allen Menschen alles aussetzen sollten. REST-APIs sind eine Möglichkeit, eine eingeschränkte Beziehung zwischen Verbrauchern und Anbietern zwischen Teams in einem Unternehmen mit einem klaren Vertrag zu definieren. Amazon war ein Pionier in dieser Organisationsform.

APIs bieten auch eine Abstraktionsebene, mit der Sie bestimmte Redewendungen verwenden können. Sie möchten nicht unbedingt mit Ihren Kunden in denselben Begriffen sprechen, die auch in Ihrer Datenbank verwendet werden. Sie möchten auch nicht unbedingt auf die gleiche Weise mit jedem Verbraucher sprechen.

guillaume31
quelle
3

Sie denken, dass REST für Datenbankabfragen gedacht ist und nicht. REST repräsentiert den aktuellen Zustand von etwas. Die Verwendung von REST ändert oder ruft eine Repräsentation ab, aber das ist alles. Wenn dieser Status von der Datenbank verfügbar wird, spielt das keine Rolle, und es interessiert niemanden, wie diese Repräsentation zustande kommt. Dies ist weder Teil von REST noch von Datenbankabfragen.

rauben
quelle
Ich schlage nicht vor, dass Datenbankabfragen == REST. Sicher ist REST in der Lage, viel mehr als eine Datenbankabstraktionsschicht zu sein, aber in den letzten zwei Unternehmen, für die ich gearbeitet habe, ist das im Wesentlichen alles, was es ist - eine Datenbankabstraktionsschicht. Es macht nichts anderes als übersetzen HTTP - Anfragen an DB - Abfragen. Und wenn das alles ist, was Sie tun, scheint es mir, dass Sie von DBAL besser bedient werden. In der Tat scheint mir der einzige Grund, warum manche Leute heutzutage REST verwenden, der Trend zu sein - nicht, weil es die beste Lösung für die anstehende Aufgabe ist.
neubert
@neubert Arbeitet DBAL wie REST direkt über das Internet?
Rob
Sicher. Sie können MySQL anweisen, eine IP-Adresse / einen Domain-Namen / einen Port zu verwenden, die / der zu einem anderen Computer im Internet gehört. Sie können sowohl SSH-Tunneling als auch (glaube ich) SSL-Authentifizierung verwenden. Vermutlich funktionieren andere DBMS ähnlich.
Neubert
@neubert: in diesem Fall der REST - API ist ein DBAL, ist es nicht?
RemcoGerlich
2
@RemcoGerlich - sicher, aber die Verwendung der REST-API als DBAL fügt möglicherweise eine unnötige Mittelschicht hinzu, die die Diagnose von Problemen erschwert. Ich meine, wenn Sie eine ausreichend breite Definition von DBAL verwenden, können Sie die Google-SERPs als DBALs betrachten. Sie müssen nur HTML-
Code