Cómo usar Hojas de cálculo de Google como base de datos (de forma responsable)

Aunque la tecnología de bases de datos y otras herramientas han recorrido un largo camino, sigue siendo difícil superar la versatilidad e intuición de la humilde hoja de cálculo. Si bien usarlos para aplicaciones sensibles y críticas, como almacenar datos de pacientes de COVID-19, es desaconsejable, el hecho de que todos sepan cómo usar una hoja de cálculo significa que son excelentes para proyectos multifuncionales más pequeños en los que un no desarrollador podría necesitar examinar o editar datos.

En esta guía, le mostraré cómo usar hojas de cálculo de Google como base de datos, con una interfaz API accesible a través de HTTP. Usaremos Autocode, un nodo.plataforma de desarrollo de API de js y editor con autocompletar incorporado, para implementar una aplicación sencilla y manejar el proceso de autenticación de Google. También exploraré las limitaciones de las hojas de cálculo de Google, incluida la escalabilidad, y dónde tiene sentido comenzar a buscar alternativas más complejas.

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

Usted no necesita nada más que una cuenta de Google y una Autocode cuenta para empezar. ¡Vamos!

Primero, deberá clonar su propia copia de la hoja de plantilla de Google haciendo clic aquí y, a continuación, presionando Usar plantilla en la parte superior derecha. Esto agregará la hoja de cálculo de muestra a su cuenta personal de Google.

Una vez hecho esto, haga clic aquí para abrir la aplicación de inicio en Autocode. Busque el código fuente si lo desea, luego instale la aplicación en su cuenta de Autocode presionando el botón verde. Cuando se te solicite vincular una hoja de Google, sigue las instrucciones del flujo para vincular tu cuenta de Google y, a continuación, selecciona la hoja de cálculo que acabas de clonar.

¡Después de eso, tu aplicación debería estar lista para funcionar! Intente acceder a algunos de los puntos finales a través de sus URL y vea lo que se devuelve/lo que sucede con su nueva base de datos de hoja de cálculo. Puede consultar la sección Endpoints a continuación, por ejemplo, llamadas.

Limitaciones

Que tl; dr fue fácil, ¿verdad? Entonces, ¿por qué no se basa todo en hojas de cálculo de Google?

Si bien un backend que tarda 30 segundos en configurarse y con el que todos pueden interactuar es extremadamente atractivo, hay algunas limitaciones obvias. Una hoja de cálculo como base de datos, como se describió anteriormente, no admite de forma natural varias tablas o relaciones entre filas. Tampoco existe el concepto de aplicar tipos para una columna, transacciones, copias de seguridad integradas o cifrado determinados, por lo que los datos confidenciales/críticos (como los datos de pacientes de COVID-19) probablemente se almacenen mejor en otro lugar.

En términos de escalabilidad, Google Sheets tiene un límite máximo de 5.000.000 de celdas (incluidas las celdas en blanco). Sin embargo, cuando traté de verificar esto creando una hoja de cálculo con tantos valores, me encontré con problemas significativos en el rendimiento antes de ese umbral:

Las operaciones masivas como pegar un gran número de celdas se ralentizaron, y luego comenzaron a fallar alrededor de 1 m de celdas. La navegación era generalmente lenta.

Mis experimentos en torno a la realización de llamadas a la API arrojaron resultados similares. La velocidad de consulta parecía escalar linealmente con el número de celdas:

Las consultas se volvieron impracticablemente lentas alrededor de la marca de 500,000 celdas, pero aún estaban por debajo de 2 segundos para una consulta de 100,000 celdas. Por lo tanto, si anticipa un conjunto de datos más grande que unos pocos cientos de miles de celdas, probablemente sería inteligente elegir una opción más escalable.

Cómo funciona

Cuando vincula su hoja de Google clonada a su aplicación e la instala en su cuenta, Autocode gestiona automáticamente la autenticación entre su aplicación y su cuenta de Google mediante el token de su aplicación (consulte la línea const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN}) en la parte superior de todos los puntos de conexión).

Para las consultas reales, cada extremo contiene un nodo.código js que llama a un método desde las hojas de google.API de consulta. Estas API toman un parámetro llamado range formateado en notación A1 que corresponde a la parte de la hoja de cálculo que la llamada a la API debe considerar como parte de la base de datos.

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

A rangeel valor de A:E es esencialmente una abreviatura de»usar todas las filas de las columnas de la A a la E de la hoja de cálculo como mi base de datos». La consulta interpreta la primera fila de cada columna de ese rango como el nombre de campo de los valores de esa columna. Dada la plantilla que clonó, la consulta anterior verificará todos los valores de la columna A (llamada Name) para las filas con un valor que coincida con la consulta.

Estas llamadas a la API utilizan el lenguaje de consulta KeyQL. Si estás interesado en una inmersión profunda, puedes echarle un vistazo para obtener más ejemplos.

Puntos finales de llamada

Como se mencionó anteriormente, estos puntos finales son accesibles a través de HTTP, por lo que puede realizar llamadas a ellos a través de fetchcURL, o cualquier otro cliente HTTP que prefiera. Puede usar su navegador web directamente:

E incluso puede usar el mismo paquete de nodos lib-node que los puntos finales usan para llamar a las API de hojas de cálculo de Google:

Sus puntos finales responderán a las solicitudes GET o POST. Los parámetros se analizan desde la cadena de consultas para las solicitudes GET y el cuerpo de la solicitud para las solicitudes POST. Cada extremo tiene parámetros predeterminados establecidos en aras de la claridad. Puede encontrar ejemplos para cada extremo a continuación.

Endpoints

functions / select / job / contains.js

Este extremo es un ejemplo de consulta KeyQL contains. Busca filas en la hoja de Google vinculada donde el campo Job contiene una subcadena (distingue entre mayúsculas y minúsculas) que coincide con el parámetro query. Desde la hoja de muestra, devuelve:

$ 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

Este extremo es un ejemplo de consulta KeyQL date_gt. Busca filas en la hoja de Google vinculada donde el campo Born On se encuentra después del parámetro query, con el formato 2000/01/01. Desde la hoja de muestra, devuelve:

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

functions/select/name/istartswith.js

Este extremo es un ejemplo de consulta KeyQL istartswith. Busca filas en la hoja de Google vinculada donde el campo Name comienza con el parámetro query (no distingue entre mayúsculas y minúsculas). A partir de la hoja de la muestra, devuelve:

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

funciones/insertar.js

Este extremo es un ejemplo de consulta de inserción. Pasa los parámetros de entrada al parámetro fieldsets de las hojas de google.consulta.insertar API
. Por ejemplo, para agregar Bill Gates a su hoja de cálculo, puede realizar la siguiente solicitud (todos los parámetros están en minúsculas):

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

Nota: Las API de autocode no responden exclusivamente a un método HTTP sobre otro, sino que se basan en nombres descriptivos para evitar confusiones sobre la funcionalidad.

funciones/actualización.js

Este extremo es un ejemplo de consulta de actualización. Establece el campo Updated At de personas cuyos nombres coinciden exactamente con el parámetro name y actualiza otros campos en función de los parámetros de entrada. Utiliza las hojas de Google.consulta.actualizar API.
Por ejemplo, para actualizar el campo Job de Bilbo Baggins a Ring Bearer en su hoja de cálculo, puede realizar la siguiente solicitud (todos los parámetros están en minúsculas):

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

Nota: Esto puede afectar a varias filas si más de una fila coincide con las condiciones de consulta.

funciones/eliminar.js

Este extremo es un ejemplo de consulta de eliminación. Elimina filas
de personas cuyos nombres coinciden exactamente con el parámetro name. Utiliza las hojas de Google.consulta.eliminar API. Por ejemplo, para eliminar Bilbo Baggins de la hoja de cálculo, puede realizar la siguiente solicitud:

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

Nota: Esto puede afectar a varias filas si más de una fila coincide con las condiciones de consulta.

¡Gracias!

Si tienes alguna pregunta o comentario, lo mejor que puedes hacer es unirte al canal de Slack de la comunidad Autocode. Puedes recibir una invitación desde la pestaña Comunidad en la barra superior del sitio web. También puedes contactarme directamente en Twitter @Hacubu.

Si quieres estar al día de lo último de Autocode, puedes seguir @AutocodeHQ. Happy hacking!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.