Comment utiliser Google Sheets comme base de données (de manière responsable)

Bien que la technologie de base de données et d’autres outils aient parcouru un long chemin, il est toujours difficile de battre la polyvalence et l’intuitivité de l’humble feuille de calcul. Bien que leur utilisation pour des applications sensibles et critiques telles que le stockage de données sur les patients COVID-19 soit mal avisée, le fait que tout le monde sache comment utiliser une feuille de calcul signifie qu’elles sont idéales pour les petits projets interfonctionnels où un non-développeur pourrait avoir besoin d’examiner ou de modifier des données.

Dans ce guide, je vais vous montrer comment utiliser Google Sheets comme base de données, avec une interface API accessible via HTTP. Nous allons utiliser Autocode, un nœud.plate-forme de développement et éditeur d’API js avec saisie semi-automatique intégrée, pour déployer une application simple et gérer le processus d’authentification de Google. Je vais également explorer les limites de Google Sheets, y compris l’évolutivité, et où il est logique de commencer à examiner des alternatives plus complexes.

# 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'

Vous n’avez besoin de rien d’autre qu’un compte Google et un compte Autocode gratuit pour commencer. Allons-y!

Tout d’abord, vous devrez cloner votre propre copie du modèle Google Sheet en cliquant ici, puis en appuyant sur Utiliser le modèle en haut à droite. Cela ajoutera l’exemple de feuille de calcul à votre compte Google personnel.

Une fois cela fait, cliquez ici pour ouvrir l’application starter en Autocode. Parcourez le code source si vous le souhaitez, puis installez l’application sur votre compte de code automatique en appuyant sur le bouton vert. Lorsque vous êtes invité à lier une feuille Google, suivez les instructions du flux pour lier votre compte Google, puis sélectionnez la feuille de calcul que vous venez de cloner.

Après cela, votre application devrait être prête à fonctionner! Essayez d’accéder à quelques-uns des points de terminaison via leurs URL et voyez ce qui est renvoyé / ce qui arrive à votre nouvelle base de données de feuille de calcul. Vous pouvez consulter la section Endpoints ci-dessous pour les appels par exemple.

Limitations

Ce tl;dr était facile, non? Alors, pourquoi tout n’est-il pas construit sur Google Sheets?

Bien qu’un backend qui prend 30 secondes à configurer et avec lequel tout le monde peut interagir soit extrêmement attrayant, il y a des limites évidentes. Une feuille de calcul en tant que base de données comme décrit ci-dessus ne prend naturellement pas en charge plusieurs tables ou relations entre les lignes. Il n’y a pas non plus de concept d’application de types pour une colonne donnée, des transactions, des sauvegardes intégrées ou un cryptage, de sorte que les données sensibles / critiques (comme les données des patients COVID-19) sont probablement mieux stockées ailleurs.

En termes d’évolutivité, Google Sheets a une limite stricte de 5 000 000 de cellules (y compris les cellules vides). Lorsque j’ai essayé de le vérifier en créant une feuille de calcul avec autant de valeurs, j’ai cependant rencontré des problèmes de performances importants avant ce seuil:

Des opérations de masse comme coller un grand nombre de cellules ont ralenti, puis ont commencé à échouer à environ 1 million de cellules. La navigation était généralement lente.

Mes expériences sur les appels d’API ont donné des résultats similaires. La vitesse de requête semblait évoluer linéairement avec le nombre de cellules:

Les requêtes sont devenues impraticablement lentes autour de la marque de 500 000 cellules, mais étaient toujours inférieures à 2 secondes pour une requête de 100 000 cellules. Par conséquent, si vous anticipez un ensemble de données supérieur à quelques centaines de milliers de cellules, il serait probablement judicieux de choisir une option plus évolutive.

Fonctionnement

Lorsque vous liez votre feuille Google clonée à votre application et l’installez sur votre compte, Autocode gère automatiquement l’authentification entre votre application et votre compte Google à l’aide du jeton de votre application (voir la ligne const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN}) en haut de tous les points de terminaison).

Pour les requêtes réelles, chaque point de terminaison contient un nœud.code js qui appelle une méthode à partir des googlesheets.API de requête. Ces API prennent un paramètre appelé range formaté en notation A1 qui correspond à la partie de la feuille de calcul que l’appel d’API doit considérer comme faisant partie de la base de données.

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

A rangela valeur de A:E est essentiellement un raccourci pour « utiliser toutes les lignes des colonnes A à E de la feuille de calcul comme base de données ». La requête interprète la première ligne de chaque colonne de cette plage comme le nom de champ des valeurs de cette colonne. Étant donné le modèle que vous avez cloné, la requête ci-dessus vérifiera toutes les valeurs de la colonne A (nommée Name) pour les lignes dont la valeur correspond à la requête.

Ces appels d’API utilisent le langage de requête KeyQL. Si vous êtes intéressé par une plongée profonde, vous pouvez le consulter pour plus d’exemples.

Points de terminaison d’appel

Comme mentionné précédemment, ces points de terminaison sont accessibles via HTTP, vous pouvez donc les appeler via fetchcURL, ou tout autre client HTTP que vous préférez. Vous pouvez utiliser votre navigateur web directement:

Et vous pouvez même utiliser le même package de nœud lib-node que les points de terminaison utilisent pour appeler les API Google Sheets :

Vos points de terminaison répondront aux requêtes GET ou POST. Les paramètres sont analysés à partir de la chaîne de requête pour les requêtes GET et du corps de la requête pour les requêtes POST. Chaque point de terminaison a des paramètres par défaut définis pour plus de clarté. Vous trouverez des exemples pour chaque point de terminaison ci-dessous.

Points de terminaison

fonctions /select/job/contains.js

Ce point de terminaison est un exemple de requête KeyQL contains. Il recherche les lignes de la feuille Google liée où le champ Job contient une sous-chaîne (sensible à la casse) correspondant au paramètre query. À partir de la feuille d’échantillon, il renvoie:

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

functions/select/born_on/date_gt.js

Ce point de terminaison est un exemple de requête KeyQL date_gt. Il recherche les lignes de la feuille Google liée où le champ Born On se trouve après le paramètre query, formaté comme 2000/01/01. À partir de la feuille d’échantillon, il renvoie:

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

fonctions/select/name/istartswith.js

Ce point de terminaison est un exemple de requête KeyQL istartswith. Il recherche les lignes de la feuille Google liée où le champ Name commence par le paramètre query (insensible à la casse). À partir de la feuille d’échantillon, il renvoie:

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

fonctions/insert.js

Ce point de terminaison est un exemple de requête d’insertion. Il transmet les paramètres d’entrée dans le paramètre fieldsets des feuilles de google.requête.insérer
API. Par exemple, pour ajouter Bill Gates à votre feuille de calcul, vous pouvez faire la demande suivante (tous les paramètres sont en minuscules) :

$ 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/'

Remarque: Les API de codage automatique ne répondent pas exclusivement à une méthode HTTP plutôt qu’à une autre, et s’appuient plutôt sur une dénomination descriptive pour éviter toute confusion sur les fonctionnalités.

fonctions / mise à jour.js

Ce point de terminaison est un exemple de requête de mise à jour. Il définit le champ Updated At des personnes dont les noms correspondent exactement au paramètre name et met à jour d’autres champs en fonction des paramètres d’entrée. Il utilise les feuilles de Google.requête.mise à jour de l’API.
Par exemple, pour mettre à jour le champ Job de Bilbo Baggins en Ring Bearer dans votre feuille de calcul, vous pouvez faire la demande suivante (tous les paramètres sont en minuscules) :

$ 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/'

Remarque : Cela peut affecter plusieurs lignes si plusieurs lignes correspondent aux conditions de la requête.

fonctions / supprimer.js

Ce point de terminaison est un exemple de requête de suppression. Il supprime les lignes
des personnes dont les noms correspondent exactement au paramètre name. Il utilise les feuilles de Google.requête.supprimer l’API. Par exemple, pour supprimer Bilbo Baggins de votre feuille de calcul, vous pouvez effectuer la demande suivante :

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

Remarque : Cela peut affecter plusieurs lignes si plusieurs lignes correspondent aux conditions de la requête.

Merci!

Si vous avez des questions ou des commentaires, la meilleure chose à faire est de rejoindre le canal Slack de la communauté Autocode. Vous pouvez recevoir une invitation depuis l’onglet Communauté dans la barre supérieure du site Web. Vous pouvez également me contacter directement sur Twitter @Hacubu.

Si vous souhaitez rester à jour sur les dernières informations d’Autocode, vous pouvez suivre @AutocodeHQ. Bon piratage!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.