So verwenden Sie Google Sheets als Datenbank (verantwortungsbewusst)

Obwohl die Datenbanktechnologie und andere Tools einen langen Weg zurückgelegt haben, ist es immer noch schwierig, die Vielseitigkeit und Intuitivität der bescheidenen Tabelle zu übertreffen. Während die Verwendung für sensible, kritische Anwendungen wie das Speichern von COVID-19-Patientendaten schlecht beraten ist, ist die Tatsache, dass jeder weiß, wie man eine Tabelle verwendet, ideal für kleinere funktionsübergreifende Projekte, bei denen ein Nicht-Entwickler möglicherweise Daten untersuchen oder bearbeiten muss.

In diesem Handbuch zeige ich Ihnen, wie Sie Google Sheets als Datenbank mit einer API-Schnittstelle verwenden, auf die über HTTP zugegriffen werden kann. Wir verwenden Autocode, einen Knoten.js API-Entwicklungsplattform und Editor mit integrierter automatischer Vervollständigung, um eine einfache App bereitzustellen und den Authentifizierungsprozess von Google abzuwickeln. Ich werde auch die Einschränkungen von Google Sheets untersuchen, einschließlich der Skalierbarkeit, und wo es sinnvoll ist, sich komplexere Alternativen anzusehen.

# Returns all people in the database whose names start # with "bil", case-insensitive$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'

Sie benötigen nichts anderes als ein Google-Konto und ein kostenloses Autocode-Konto, um loszulegen. Los geht’s!

Zuerst müssen Sie Ihre eigene Kopie der Vorlage Google Sheet klonen, indem Sie hier klicken und dann oben rechts auf Vorlage verwenden klicken. Dadurch wird die Beispieltabelle zu Ihrem persönlichen Google-Konto hinzugefügt.

Sobald Sie das getan haben, klicken Sie hier, um die Starter-App in Autocode zu öffnen. Stöbern Sie im Quellcode herum, wenn Sie möchten, und installieren Sie die App in Ihrem Autocode-Konto, indem Sie die grüne Taste drücken. Wenn Sie aufgefordert werden, ein Google Sheet zu verknüpfen, befolgen Sie die Anweisungen im Ablauf, um Ihr Google-Konto zu verknüpfen, und wählen Sie dann die Tabelle aus, die Sie gerade geklont haben.

Danach sollte Ihre App einsatzbereit sein! Versuchen Sie, über ihre URLs auf einige der Endpunkte zuzugreifen, und sehen Sie, was zurückgegeben wird / was mit Ihrer neuen Tabellenkalkulationsdatenbank passiert. Sie können den Abschnitt Endpoints unten für Beispielaufrufe lesen.

Einschränkungen

Das tl;dr war einfach, oder? Warum basiert nicht alles auf Google Sheets?

Während ein Backend, dessen Einrichtung 30 Sekunden dauert und mit dem jeder interagieren kann, äußerst ansprechend ist, gibt es einige offensichtliche Einschränkungen. Eine Tabelle als Datenbank, wie oben beschrieben, unterstützt natürlich nicht mehrere Tabellen oder Beziehungen zwischen Zeilen. Es gibt auch kein Konzept zum Erzwingen von Typen für eine bestimmte Spalte, Transaktionen, integrierte Sicherungen oder Verschlüsselung, sodass sensible / kritische Daten (wie COVID-19-Patientendaten) wahrscheinlich am besten an anderer Stelle gespeichert werden.

In Bezug auf die Skalierbarkeit hat Google Sheets ein hartes Limit von 5.000.000 Zellen (einschließlich leerer Zellen). Als ich versuchte, dies zu überprüfen, indem ich eine Tabelle mit so vielen Werten erstellte, stieß ich jedoch vor diesem Schwellenwert auf erhebliche Leistungsprobleme:

Massenoperationen wie das Einfügen einer großen Anzahl von Zellen verlangsamten sich und scheiterten dann bei etwa 1m Zellen. Die Navigation war im Allgemeinen träge.

Meine Experimente mit API-Aufrufen ergaben ähnliche Ergebnisse. Die Abfragegeschwindigkeit schien linear mit der Anzahl der Zellen zu skalieren:

Abfragen wurden um die 500.000-Zellen-Marke unpraktisch langsam, lagen aber bei einer 100.000-Zellen-Abfrage immer noch unter 2 Sekunden. Wenn Sie also einen Datensatz erwarten, der größer als einige hunderttausend Zellen ist, wäre es wahrscheinlich klug, eine skalierbarere Option zu wählen.

Funktionsweise

Wenn Sie Ihr geklontes Google Sheet mit Ihrer App verknüpfen und in Ihrem Konto installieren, übernimmt Autocode automatisch die Authentifizierung zwischen Ihrer App und Ihrem Google-Konto mithilfe des Tokens Ihrer App (siehe die Zeile const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN}) oben auf allen Endpunkten).

Für die eigentlichen Abfragen enthält jeder Endpunkt Knoten.js-Code, der eine Methode aus den Googlesheets aufruft.abfrage-API. Diese APIs verwenden einen Parameter mit dem Namen range, der in A1-Notation formatiert ist und dem Teil der Tabelle entspricht, den der API-Aufruf als Teil der Datenbank betrachten sollte.

let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });

A range Wert von A:E ist im Wesentlichen eine Abkürzung für „Alle Zeilen in den Spalten A bis E in der Tabelle als meine Datenbank verwenden“. Die Abfrage interpretiert die erste Zeile jeder Spalte in diesem Bereich als Feldnamen der Werte in dieser Spalte. Angesichts der von Ihnen geklonten Vorlage überprüft die obige Abfrage alle Werte in der Spalte A (mit dem Namen Name ) auf Zeilen mit einem Wert, der der Abfrage entspricht.

Diese API-Aufrufe verwenden die Abfragesprache KeyQL. Wenn Sie an einem tiefen Tauchgang interessiert sind, können Sie weitere Beispiele finden.

Endpunkte aufrufen

Wie bereits erwähnt, sind diese Endpunkte über HTTP zugänglich, sodass Sie sie über fetchcURL oder einen anderen HTTP-Client aufrufen können, den Sie bevorzugen. Sie können Ihren Webbrowser direkt verwenden:

Und Sie können sogar dasselbe lib-node-Knotenpaket verwenden, mit dem die Endpunkte die Google Sheets-APIs aufrufen:

Ihre Endpunkte antworten entweder auf GET- oder POST-Anforderungen. Parameter werden aus dem Querystring für GET-Anforderungen und dem Anforderungstext für POST-Anforderungen analysiert. Für jeden Endpunkt sind der Übersichtlichkeit halber Standardparameter festgelegt. Nachfolgend finden Sie Beispiele für jeden Endpunkt.

Endpunkte

Funktionen/select/job/contains.js

Dieser Endpunkt ist ein Beispiel für eine contains KeyQL-Abfrage. Es wird nach Zeilen im verknüpften Google Sheet gesucht, in denen das Feld Job eine Teilzeichenfolge enthält (Groß- und Kleinschreibung beachten), die dem Parameter query . Aus dem Beispielblatt wird zurückgegeben:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'

Funktionen/select/born_on/date_gt.js

Dieser Endpunkt ist ein Beispiel für eine date_gt KeyQL-Abfrage. Es sucht nach Zeilen im verknüpften Google Sheet, in denen sich das Feld Born On nach dem Parameter query befindet, formatiert als 2000/01/01. Aus dem Beispielblatt wird zurückgegeben:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/born_on/date_gt/?query=2000/01/01'

Funktionen/select/name/istartswith.js

Dieser Endpunkt ist ein Beispiel für eine istartswith KeyQL-Abfrage. Es wird nach Zeilen im verknüpften Google Sheet gesucht, in denen das Feld Name mit dem Parameter query beginnt (Groß- und Kleinschreibung wird nicht berücksichtigt). Aus dem Beispielblatt wird zurückgegeben:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'

Funktionen/einfügen.js

Dieser Endpunkt ist ein Beispiel für eine Insert-Abfrage. Es übergibt die Eingabeparameter in den fieldsets Parameter der Googlesheets.Abfrage.einfügen
API. Um beispielsweise Bill Gates zu Ihrer Tabelle hinzuzufügen, können Sie die folgende Anfrage stellen (alle Parameter sind Kleinbuchstaben):

$ curl --request POST \ --header "Content-Type: application/json" \ --data '{"name":"Bill Gates","job":"CEO","fictional":false,"bornOn":"10/28/1955"}' \ --url 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/insert/'

Hinweis: Autocode-APIs reagieren nicht ausschließlich auf eine HTTP-Methode über eine andere und verlassen sich stattdessen auf beschreibende Benennungen, um Verwirrung über die Funktionalität zu vermeiden.

Funktionen/aktualisieren.js

Dieser Endpunkt ist ein Beispiel für eine Aktualisierungsabfrage. Es setzt das Updated At Feld von Personen, deren Namen genau mit dem name Parameter übereinstimmen, und aktualisiert andere Felder basierend auf Eingabeparametern. Es verwendet die Googlesheets.Abfrage.API aktualisieren.
Um beispielsweise das Job -Feld von Bilbo Baggins auf Ring Bearer in Ihrer Tabelle zu aktualisieren, können Sie die folgende Anfrage stellen (alle Parameter sind Kleinbuchstaben):

$ curl --request POST \ --header "Content-Type: application/json" \ --data '{"name":"Bilbo Baggins","job":"Ring Bearer"}' \ --url 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/update/'

Hinweis: Dies kann mehrere Zeilen betreffen, wenn mehr als eine Zeile den Abfragebedingungen entspricht.

Funktionen/löschen.js

Dieser Endpunkt ist ein Beispiel für eine Delete-Abfrage. Es entfernt Zeilen
von Personen, deren Namen genau mit dem Parameter name übereinstimmen. Es verwendet die Googlesheets.Abfrage.API löschen. Um beispielsweise Bilbo Baggins aus Ihrer Tabelle zu entfernen, können Sie die folgende Anfrage stellen:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'

Hinweis: Dies kann mehrere Zeilen betreffen, wenn mehr als eine Zeile den Abfragebedingungen entspricht.

Vielen Dank!

Wenn Sie Fragen oder Feedback haben, ist es am besten, dem Slack-Kanal der Autocode-Community beizutreten. Sie können eine Einladung über die Registerkarte Community in der oberen Leiste der Website erhalten. Sie können mich auch direkt auf Twitter @Hacubu erreichen.

Wenn Sie über das Neueste von Autocode auf dem Laufenden bleiben möchten, können Sie @AutocodeHQ folgen. Glückliches Hacken!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.