terwijl databasetechnologie en andere tools een lange weg hebben afgelegd, is het nog steeds moeilijk om de veelzijdigheid en intuïtiviteit van de eenvoudige spreadsheet te verslaan. Terwijl het gebruik ervan voor gevoelige, kritische toepassingen zoals het opslaan van covid-19-patiëntgegevens onverstandig is, betekent het feit dat iedereen weet hoe een spreadsheet te gebruiken dat ze geweldig zijn voor kleinere cross-functionele projecten waar een niet-Ontwikkelaar mogelijk gegevens moet onderzoeken of bewerken.
in deze gids zal ik u laten zien hoe u Google Spreadsheets als een database kunt gebruiken, compleet met een API-interface die toegankelijk is via HTTP. We gebruiken Autocode, een knooppunt.js API ontwikkelplatform en editor met ingebouwde autocomplete, om een eenvoudige app te implementeren en het authenticatieproces van Google af te handelen. Ik zal ook de beperkingen van Google Spreadsheets onderzoeken, waaronder schaalbaarheid, en waar het zinvol is om te gaan kijken naar meer complexe alternatieven.
# 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'
u hebt niets anders dan een Google-account en een gratis Autocode-account nodig om te beginnen. Laten we gaan!
eerst moet u uw eigen kopie van het Google-sjabloon klonen door hier te klikken en vervolgens op sjabloon gebruiken in de rechterbovenhoek te drukken. Dit zal het voorbeeld spreadsheet toe te voegen aan uw persoonlijke Google-account.
zodra u dat hebt gedaan, Klik hier om de starter app te openen in Autocode. Porren rond de broncode als je wilt, Installeer de app om uw autocode-account door op de groene knop. Wanneer u wordt gevraagd om een Google-spreadsheet te koppelen, volgt u de instructies in de stroom om uw Google-account te koppelen en selecteert u de spreadsheet die u zojuist hebt gekloond.
daarna, uw app moet klaar zijn om te gaan! Probeer toegang te krijgen tot een paar van de eindpunten via hun URL ‘ s en zie wat er wordt geretourneerd/wat er gebeurt met uw nieuwe spreadsheet database. U kunt de Endpoints
sectie hieronder bekijken, bijvoorbeeld oproepen.
beperkingen
dat tl; dr gemakkelijk was, toch? Dus waarom is niet alles gebouwd op Google Spreadsheets?
hoewel een backend die 30 seconden in beslag neemt om op te zetten en waarmee iedereen kan interageren zeer aantrekkelijk is, zijn er enkele duidelijke beperkingen. Een spreadsheet als een database Zoals hierboven beschreven ondersteunt natuurlijk niet meerdere tabellen of relaties tussen rijen. Er is ook geen concept van het afdwingen van types voor een bepaalde kolom, transacties, ingebouwde back-ups of encryptie, dus gevoelige/kritische gegevens (zoals covid-19 patiëntgegevens) is waarschijnlijk het beste elders opgeslagen.
in termen van schaalbaarheid heeft Google Spreadsheets een harde limiet van 5.000.000 cellen (inclusief lege cellen). Toen ik dit probeerde te verifiëren door een spreadsheet met zoveel waarden aan te maken, kwam ik echter belangrijke problemen tegen in de prestaties vóór die drempel:
massa-operaties zoals het plakken van een groot aantal cellen vertraagde, en begonnen vervolgens te mislukken bij ongeveer 1m cellen. Navigatie was over het algemeen traag.
mijn experimenten rond het maken van API calls leverden vergelijkbare resultaten op. Querysnelheid leek lineair te schalen met het aantal cellen:
Queries werden onpraktisch langzaam rond de 500.000 celmarkering, maar waren nog steeds onder de 2 seconden voor een 100.000 cel query. Daarom, als u verwacht dat een dataset groter is dan een paar honderdduizend cellen, zou het waarschijnlijk slim zijn om een meer schaalbare optie te kiezen.
hoe het werkt
wanneer u uw gekloonde Google-blad koppelt aan uw app en het installeert aan uw account, verwerkt Autocode automatisch de authenticatie tussen uw app en uw Google-account met behulp van het token van uw app (zie de const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})
regel bovenaan alle eindpunten).
voor de eigenlijke query ‘ s bevat elk eindpunt knooppunt.js code die een methode roept van de googlesheets.zoek API. Deze API ‘ s nemen een parameter genaamd range
geformatteerd in A1 notatie die overeenkomt met het deel van de spreadsheet de API aanroep zou moeten overwegen als onderdeel van de database.
let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });
a range
waarde vanA:E
is in wezen afkorting voor”gebruik alle rijen in kolommen A tot en met E in de spreadsheet als mijn database”. De query interpreteert de eerste rij van elke kolom in dat bereik als de veldnaam van de waarden in die kolom. Gegeven de sjabloon die u gekloond hebt, controleert de bovenstaande query alle waarden in de kolom A (genaamd Name
) voor rijen met een waarde die overeenkomt met de query.
deze API-aanroepen gebruiken de keyql-querytaal. Als je geïnteresseerd bent in een diepe duik, kun je het bekijken voor meer voorbeelden.
aanroepende eindpunten
zoals eerder vermeld, zijn deze eindpunten toegankelijk via HTTP, zodat u ze kunt aanroepen via fetch
cURL
, of welke andere HTTP-client u ook verkiest. U kunt uw webbrowser direct gebruiken:
en u kunt zelfs hetzelfde lib-node node-pakket gebruiken dat de eindpunten gebruiken om de Google Sheets API ‘ s aan te roepen:
uw eindpunten zullen reageren op verzoeken van GET of POST. Parameters worden ontleed uit de querystring voor GET requests en het verzoek lichaam voor POST requests. Elk eindpunt heeft standaard parameters ingesteld voor de duidelijkheid. Hieronder vindt u voorbeelden voor elk eindpunt.
eindpunten
functies/selecteren / taak / bevat.js
dit eindpunt is een voorbeeld van een contains
KeyQL query. Het zoekt naar rijen in het gekoppelde Google-blad waar hetJob
veld een substring (hoofdlettergevoelig) bevat die overeenkomt met de parameterquery
. Van het voorbeeldblad geeft het:
$ 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
dit eindpunt is een voorbeeld van een KeyQL query. Het zoekt naar rijen in het gekoppelde Google-blad waar het veld Born On
achter de parameter query
staat, opgemaakt als 2000/01/01
. Vanaf het voorbeeldblad geeft het:
$ 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
dit eindpunt is een voorbeeld van een istartswith
KeyQL query. Het zoekt naar rijen in het gekoppelde Google-blad waar het veld Name
begint met de parameter query
(ongevoelig voor hoofdletters). Van het voorbeeldblad geeft het:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
functies/insert.js
dit eindpunt is een voorbeeld van een query invoegen. Het geeft de invoerparameters door aan de fieldsets
parameter van de googlesheets.query.
API invoegen. Om bijvoorbeeld Bill Gates
aan uw spreadsheet toe te voegen, kunt u het volgende verzoek doen (alle parameters zijn kleine letters):
$ 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/'
opmerking: Autocode-API ‘ s reageren niet uitsluitend op de ene HTTP-methode boven de andere, en vertrouwen in plaats daarvan op beschrijvende namen om verwarring over functionaliteit te voorkomen.
functies / update.js
dit eindpunt is een voorbeeld van een update query. Het stelt het Updated At
veld in van mensen wiens namen exact overeenkomen met de name
parameter, en werkt andere velden bij op basis van invoerparameters. Het gebruikt de googlesheets.query.update API.
bijvoorbeeld, om het Job
veld van Bilbo Baggins
naar Ring Bearer
in uw spreadsheet bij te werken, kunt u het volgende verzoek doen (alle parameters zijn kleine letters):
$ 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/'
Opmerking: Dit kan meerdere rijen beïnvloeden als meer dan één rij overeenkomt met de query-voorwaarden.
functies / verwijderen.js
dit eindpunt is een voorbeeld van een delete query. Het verwijdert rijen
van mensen waarvan de namen exact overeenkomen met dename
parameter. Het gebruikt de googlesheets.query.API verwijderen. Om bijvoorbeeld Bilbo Baggins
uit uw spreadsheet te verwijderen, kunt u het volgende verzoek doen:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'
Opmerking: Dit kan meerdere rijen beïnvloeden als meer dan één rij overeenkomt met de query-voorwaarden.
Dank u!
Als u vragen of feedback hebt, kunt u het beste lid worden van het Slack-kanaal van de autocode-gemeenschap. U kunt een uitnodiging krijgen via het tabblad Community in de bovenste balk op de website. Je kunt me ook rechtstreeks bereiken op Twitter @Hacubu.
Als u op de hoogte wilt blijven van het laatste nieuws van Autocode, kunt u @AutocodeHQ volgen. Gelukkig hacken!