mens databaseteknologi og andre verktøy har kommet langt, er det fortsatt vanskelig å slå det ydmyke regnearkets allsidighet og intuitivitet. Mens du bruker dem til sensitive, kritiske applikasjoner som lagring AV COVID-19 pasientdata, er det dårlig råd, det faktum at alle vet hvordan man bruker et regneark, betyr at de er gode for mindre tverrfunksjonelle prosjekter der en ikke-utvikler kanskje må undersøke eller redigere data.
i denne veiledningen viser jeg Deg Hvordan Du bruker Google-Ark som en database, komplett med ET API-grensesnitt tilgjengelig VIA HTTP. Vi bruker Autokode, En Node.js API utviklingsplattform og editor med innebygd autofullfør, for å distribuere en enkel app og håndtere googles godkjenningsprosess. Jeg vil også utforske begrensningene I Google Sheets, inkludert skalerbarhet, og hvor det er fornuftig å begynne å se på mer 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 trenger ikke noe annet enn En Google-konto og en Gratis Autocode-konto for å komme i gang. Kom igjen!
først må du klone din egen kopi Av malen Google-Arket ved å klikke her, og deretter trykke På Bruk Mal øverst til høyre. Dette vil legge til eksempelarket i din personlige Google-konto.
når du har gjort det, klikk her for å åpne starter-appen I Autocode. Poke rundt kildekoden hvis du vil, og installer appen Til Autocode-kontoen din ved å trykke på den grønne knappen. Når du blir bedt Om å koble Til Et Google-Ark, følger du instruksjonene i flyten for å koble Til Google-kontoen din, og deretter velger du regnearket du nettopp klonet.
etter det bør appen din være klar til å gå! Prøv å få tilgang til noen av endepunktene via Nettadressene deres, og se hva som returneres / hva som skjer med den nye regnearkdatabasen. Du kan sjekke utEndpoints
delen nedenfor for eksempel samtaler.
Begrensninger
Det tl; dr var lett, ikke sant? Så hvorfor er ikke Alt bygget På Google Sheets? Mens en backend som tar 30 sekunder å sette opp og at alle kan samhandle med, er ekstremt tiltalende, er det noen åpenbare begrensninger. Et regneark som en database som beskrevet ovenfor støtter ikke naturlig flere tabeller eller relasjoner mellom rader. Det er heller ikke noe konsept for å håndheve typer for en gitt kolonne, transaksjoner, innebygde sikkerhetskopier eller kryptering, så sensitive / kritiske data (SOM COVID-19 pasientdata) er sannsynligvis best lagret andre steder.Når Det Gjelder skalerbarhet, Har Google Regneark en hard grense på 5 000 000 celler (inkludert tomme celler). Da jeg prøvde å bekrefte dette ved å lage et regneark med så mange verdier, opplevde jeg imidlertid betydelige problemer i ytelsen før den terskelen:
Masseoperasjoner som å lime inn et stort antall celler bremset, og begynte å mislykkes på rundt 1m celler. Navigasjonen var generelt svak.
mine eksperimenter rundt Å LAGE API-anrop ga lignende resultater. Spørringshastigheten syntes å skalere lineært med antall celler:
Spørringer ble upraktisk treg rundt 500 000 celle merket, men var fortsatt under 2 sekunder for en 100 000 celle spørring. Derfor, hvis du forventer et datasett som er større enn noen få hundre tusen celler, vil det trolig være smart å velge et mer skalerbart alternativ.
Slik Fungerer
Når Du kobler det klonede Google-Arket ditt til appen din og installerer det på kontoen din, håndterer Autocode automatisk godkjenning mellom appen din og Google-kontoen din ved hjelp av appens token (se const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})
– linjen øverst på alle endepunktene).
for de faktiske spørringene inneholder hvert endepunkt Noden.js-kode som kaller en metode fra googlesheets.spørring API. Disse Apiene tar en parameter kalt range
formatert I a1-notasjon som tilsvarer den delen AV regnearket API-kallet bør vurdere som en del av databasen.
let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });
Arange
verdien avA:E
er i hovedsak forkortelse for «bruk alle rader I kolonne a til e i regnearket som min database». Spørringen tolker den første raden i hver kolonne i dette området som feltnavnet til verdiene i den kolonnen. Gitt malen du klonet, vil spørringen ovenfor sjekke alle verdier I a-kolonnen (kaltName
) for rader med en verdi som samsvarer med spørringen.
DISSE API-anropene bruker KeyQL-spørrespråket. Hvis du er interessert i et dypt dykk, kan du sjekke det ut for flere eksempler.
Calling Endpoints
som tidligere nevnt er disse endepunktene tilgjengelige VIA HTTP, slik at du kan ringe til dem via fetch
cURL
, eller hvilken SOM helst ANNEN HTTP-klient du foretrekker. Du kan bruke nettleseren direkte:
Og du kan til og med bruke den samme lib-node-Nodepakken som endepunktene bruker Til Å ringe Til Google Sheets Apier:
endepunktene dine vil svare på ENTEN FÅ-eller POSTFORESPØRSLER. Parametere analyseres fra querystring FOR FÅ forespørsler og forespørselen kroppen FOR POST forespørsler. Hvert endepunkt har standardparametere angitt for klarhetens skyld. Du kan finne eksempler for hvert endepunkt nedenfor.
Endepunkter
funksjoner / velg / jobb / inneholder.js
dette endepunktet er et eksempel på Encontains
KeyQL-spørring. Det ser etter rader i Det koblede Google-Arket derJob
-feltet inneholder en substring (case-sensitive) som samsvarer med parameteren query
. Fra eksempelarket returnerer den:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'
funksjoner/velg / born_on / date_gt.js
dette endepunktet er et eksempel på Endate_gt
KeyQL-spørring. Det ser etter rader i Det koblede Google-Arket derBorn On
– feltet er etterquery
– parameteren, formatert som2000/01/01
. Fra eksempelarket returnerer den:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/born_on/date_gt/?query=2000/01/01'
dette endepunktet er et eksempel på Enistartswith
KeyQL-spørring. Det ser etter rader i Det koblede Google-Arket derName
-feltet starter medquery
– parameteren (ikke-sensitiv). Fra eksempelarket returnerer den:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
funksjoner / insert.js
dette endepunktet er et eksempel på en insert-spørring. Den overfører inngangsparametrene tilfieldsets
parameteren til googlesheets.spørsmål.sett INN
API. Hvis du for eksempel vil legge tilBill Gates
i regnearket, kan du gjøre følgende forespørsel (alle parametere er små bokstaver):
$ 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/'
: Autokode-Api-er svarer ikke utelukkende PÅ EN HTTP-METODE over en annen, og er i stedet avhengige av beskrivende navngivning for å unngå forvirring over funksjonalitet.
funksjoner / oppdatering.js
dette endepunktet er et eksempel på en oppdateringsspørring. Den angirUpdated At
– feltet for personer hvis navn samsvarer nøyaktig medname
– parameteren, og oppdaterer andre felt basert på inngangsparametere. Den bruker googlesheets.spørsmål.oppdater API.
for eksempel, for å oppdatereJob
feltetBilbo Baggins
tilRing Bearer
i regnearket, kan du gjøre følgende forespørsel (alle parametere er små bokstaver):
$ 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/'
merk: dette kan påvirke flere rader hvis mer enn en rad samsvarer med spørringsbetingelsene.
funksjoner / slett.js
dette endepunktet er et eksempel på en slettespørring. Det fjerner rader
av personer hvis navn nøyaktig samsvarer med parameterenname
. Den bruker googlesheets.spørsmål.slett API. Hvis du for eksempel vil fjerne Bilbo Baggins
fra regnearket, kan du gjøre følgende forespørsel:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'
Merk: Dette kan påvirke flere rader hvis mer enn en rad samsvarer med spørringsbetingelsene.
Takk!
hvis du har spørsmål eller tilbakemeldinger, er det best å bli Med I Autocode community Slack-kanalen. Du kan få en invitasjon fra Fellesskap-fanen i topplinjen på nettstedet. Du kan også nå ut til Meg direkte På Twitter @Hacubu.
hvis du vil holde deg oppdatert på det siste Fra Autocode, kan du følge @ AutocodeHQ . Glad hacking!