mens databaseteknologi og andre værktøjer er kommet langt, er det stadig svært at slå det ydmyge regnearks alsidighed og intuitivitet. Mens det ikke anbefales at bruge dem til følsomme, kritiske applikationer som lagring af COVID-19-patientdata, betyder det faktum, at alle ved, hvordan man bruger et regneark, at de er gode til mindre tværfunktionelle projekter, hvor en ikke-udvikler muligvis skal undersøge eller redigere data.
i denne vejledning viser jeg dig, hvordan du bruger Google Sheets som en database, komplet med en API-grænseflade, der er tilgængelig via HTTP. Vi bruger Autocode, en Node.JS API udviklingsplatform og editor med indbygget autofuldførelse, til at implementere en simpel app og håndtere Googles godkendelsesproces. Jeg vil også undersøge begrænsningerne i Google Sheets, herunder skalerbarhed, og hvor det giver mening at begynde at se på mere komplekse alternativer.
# 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'
du behøver ikke andet end en Google-konto og en gratis Autocode-konto for at komme i gang. Kom så!
først skal du klone din egen kopi af skabelonen Google Sheet ved at klikke her og derefter trykke på brug Skabelon øverst til højre. Dette tilføjer eksemplet regneark til din personlige Google-konto.
Når du har gjort det, skal du klikke her for at åbne starter-appen i Autocode. Stik rundt om kildekoden, hvis du vil, og installer derefter appen til din Autocode-konto ved at trykke på den grønne knap. Når du bliver bedt om at linke et Google-ark, skal du følge instruktionerne i forløbet for at linke din Google-konto og derefter vælge det regneark, du lige har klonet.
derefter skal din app være klar til at gå! Prøv at få adgang til et par af slutpunkterne via deres URL ‘ er og se, hvad der returneres/hvad der sker med din nye regnearksdatabase. Du kan tjekke Endpoints
sektionen nedenfor for eksempel opkald.
begrænsninger
at TL; dr var let, ikke? Så hvorfor er ikke alt bygget på Google Sheets?
mens en backend, der tager 30 sekunder at konfigurere, og som alle kan interagere med, er ekstremt tiltalende, er der nogle åbenlyse begrænsninger. Et regneark som en database som beskrevet ovenfor understøtter naturligvis ikke flere tabeller eller relationer mellem rækker. Der er heller ikke noget begreb om håndhævelse af typer for en given kolonne, transaktioner, indbyggede sikkerhedskopier eller kryptering, så følsomme/kritiske data (som COVID-19 patientdata) gemmes sandsynligvis bedst andre steder.
Med hensyn til skalerbarhed har Google Sheets en hård grænse på 5.000.000 celler (inklusive tomme celler). Da jeg forsøgte at bekræfte dette ved at oprette et regneark med så mange værdier, stødte jeg dog på betydelige problemer i ydeevne før denne tærskel:
Masseoperationer som at indsætte et stort antal celler bremset og begyndte derefter at mislykkes ved omkring 1m celler. Navigationen var generelt træg.
mine eksperimenter omkring API-opkald gav lignende resultater. Forespørgselshastighed syntes at skalere lineært med antallet af celler:
forespørgsler blev upraktisk langsomme omkring 500.000 cellemærke, men var stadig under 2 sekunder for en 100.000 celleforespørgsel. Derfor, hvis du forventer et datasæt større end et par hundrede tusinde celler, ville det nok være smart at vælge en mere skalerbar mulighed.
Sådan fungerer det
Når du linker dit klonede Google-ark til din app og installerer det til din konto, håndterer Autocode automatisk godkendelse mellem din app og din Google-konto ved hjælp af din apps token (se linjenconst lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})
øverst på alle slutpunkter).
for de faktiske forespørgsler indeholder hvert slutpunkt Node.js-kode, der kalder en metode fra googlesheets.forespørgsel API. Disse API ‘ er tager en parameter kaldet range
formateret i A1 notation, der svarer til den del af regnearket API-opkaldet skal overveje som en del af databasen.
let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });
Arange
værdi afA:E
er i det væsentlige stenografi for “brug alle rækker i kolonner A til E i regnearket som min database”. Forespørgslen fortolker den første række i hver kolonne i dette område som feltnavnet på værdierne i den kolonne. I betragtning af den skabelon, du klonede, kontrollerer ovenstående forespørgsel alle værdier i A-kolonnen (navngivet Name
) for rækker med en værdi, der matcher forespørgslen.
disse API-opkald bruger forespørgselssproget. Hvis du er interesseret i et dybt dyk, kan du tjekke det ud for flere eksempler.
Opkaldsendepunkter
som tidligere nævnt er disse slutpunkter tilgængelige via HTTP, så du kan foretage opkald til dem viafetch
cURL
eller hvilken anden HTTP-klient du foretrækker. Du kan bruge din hjemmeside direkte:
og du kan endda bruge den samme lib-node Node-pakke, som slutpunkterne bruger til at kalde Google Sheets API ‘ er:
dine slutpunkter vil svare på enten få eller sende anmodninger. Parametre analyseres fra forespørgselsstrengen for at få anmodninger og anmodningsorganet for anmodninger om indlæg. Hvert slutpunkt har standardparametre indstillet af hensyn til klarheden. Du kan finde eksempler for hvert slutpunkt nedenfor.
endepunkter
funktioner/Vælg/job / indeholder.js
dette endepunkt er et eksempel på encontains
nøgleforespørgsel. Det ser efter rækker i det linkede Google-ark, hvor feltet Job
indeholder en substring (case-sensitive), der matcher parameteren query
. Fra prøvearket vender det tilbage:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'
funktioner/Vælg/born_on/date_gt.js
dette endepunkt er et eksempel på endate_gt
nøgleforespørgsel. Det ser efter rækker i det linkede Google-ark, hvor Born On
– feltet er efter query
parameter, formateret som 2000/01/01
. Fra prøvearket vender det tilbage:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/born_on/date_gt/?query=2000/01/01'
dette endepunkt er et eksempel på enistartswith
nøgleforespørgsel. Det ser efter rækker i det linkede Google-ark, hvor parameteren Name
starter med query
(case-ufølsom). Fra prøvearket vender det tilbage:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
funktioner/indsæt.js
dette slutpunkt er et eksempel på en indsæt forespørgsel. Det passerer inputparametrene ifieldsets
parameter for googlesheets.forespørgsel.indsæt
API. For eksempel for at tilføje Bill Gates
til dit regneark, kan du foretage følgende anmodning (alle parametre er små bogstaver):
$ 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/'
Bemærk: Autocode API ‘ er reagerer ikke udelukkende på en HTTP-metode frem for en anden og stoler i stedet på beskrivende navngivning for at undgå forvirring over funktionalitet.
funktioner / opdatering.js
dette slutpunkt er et eksempel på en opdateringsforespørgsel. Det indstiller Updated At
felt af personer, hvis navne nøjagtigt matchername
parameter og opdaterer andre felter baseret på inputparametre. Det bruger googlesheets.forespørgsel.Opdater API.
for eksempel for at opdatereJob
felt afBilbo Baggins
tilRing Bearer
i dit regneark kan du foretage følgende anmodning (alle parametre er små bogstaver):
$ 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/'
bemærk: dette kan påvirke flere rækker, hvis mere end en række matcher forespørgselsbetingelserne.
funktioner / Slet.js
dette slutpunkt er et eksempel på en sletteforespørgsel. Det fjerner rækker
af personer, hvis navne nøjagtigt matcher name
parameter. Det bruger googlesheets.forespørgsel.slet API. Hvis du f.eks. vil fjerne Bilbo Baggins
fra dit regneark, kan du fremsætte følgende anmodning:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'
Bemærk: Dette kan påvirke flere rækker, hvis mere end en række matcher forespørgselsbetingelserne.
Tak!
Hvis du har spørgsmål eller feedback, er det bedste at gøre at deltage i Autocode community Slack-kanalen. Du kan få en invitation fra fanen Fællesskab i øverste bjælke på hjemmesiden. Du kan også kontakte mig direkte på kvidre @Hacubu.
Hvis du vil holde dig opdateret om det nyeste fra Autocode, kan du følge @Autocodehk. Glad hacking!