Zatímco databázové technologie a další nástroje, které mají za sebou dlouhou cestu, je to stále těžké porazit pokorný tabulky je všestrannost a intuitivnost. Při jejich používání pro citlivou, kritické aplikace, jako je ukládání COVID-19 údaje o pacientovi, je neuvážené, skutečnost, že každý ví, jak používat tabulky znamená, že jsou skvělé pro menší cross-funkční projekty, kde non-vývojáře pravděpodobně nutné zkontrolovat nebo upravit data.
v této příručce vám ukážu, jak používat tabulky Google jako databázi, doplněné rozhraním API přístupným přes HTTP. Použijeme Autocode, uzel.vývojová platforma JS API a editor s vestavěným automatickým dokončováním, pro nasazení jednoduché aplikace a zpracování procesu ověřování Google. Prozkoumám také omezení Tabulek Google, včetně škálovatelnosti, a kde má smysl začít hledat složitější alternativy.
# 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'
nepotřebujete nic jiného, než Google účtu a zdarma Autocode účet, abyste mohli začít. Jdeme!
nejprve budete muset klonovat vlastní kopii šablony list Google kliknutím sem a stisknutím tlačítka Použít šablonu v pravém horním rohu. Tím se do vašeho osobního účtu Google přidá vzorová tabulka.
jakmile to uděláte, kliknutím sem otevřete aplikaci starter v Autocode. Poke kolem zdrojového kódu, pokud chcete, nainstalujte aplikaci do svého účtu Autocode stisknutím zeleného tlačítka. Po zobrazení výzvy k propojení Google Listu, postupujte podle pokynů v toku propojit svůj účet Google, vyberte tabulku, kterou jen klonovat.
poté by vaše aplikace měla být připravena jít! Pokuste se získat několik koncových bodů, přes jejich Url a vidět, co se vrátil/co se stane s vaší nové tabulky databáze. Můžete se podívat na Endpoints
část níže pro příklad volání.
omezení
že tl; dr bylo snadné, že? Tak proč není vše postaveno na tabulkách Google?
Zatímco backend, který trvá 30 sekund nastavit a že každý může komunikovat s je velmi atraktivní, tam jsou některé zjevné omezení. Tabulka jako databáze, jak je popsáno výše, přirozeně nepodporuje více tabulek nebo vztahů mezi řádky. Tam je také žádný koncept prosazování typy pro daný sloupec, transakce, vestavěný zálohování nebo šifrování, takže citlivé/kritické údaje (jako COVID-19 pacientských dat) je asi nejlepší uloženy jinde.
pokud jde o škálovatelnost, Google Listy má pevný limit 5.000.000 buněk (včetně prázdných buněk). Když jsem se snažil to ověřit tím, že vytvoří tabulku se, že mnoho hodnot, nicméně jsem narazil na významné problémy ve výkonu před práh:
Hmotnost-operace jako vkládání velkého počtu buněk zpomalil, pak začalo k selhání na úrovni kolem 1m buněk. Navigace byla obecně pomalá.
mé experimenty kolem volání API přinesly podobné výsledky. Zdálo se, že rychlost dotazu se lineárně škáluje s počtem buněk:
Dotazy stal neprakticky pomalé kolem 500.000 mobilní značka, ale byly stále pod 2 sekundy za 100.000 buněk dotaz. Pokud tedy očekáváte datovou sadu větší než několik set tisíc buněk, bylo by pravděpodobně chytré zvolit škálovatelnější možnost.
Jak To Funguje
Když jste odkaz vaší klonovaných Google Listu, aby vaše aplikace a nainstalovat jej na váš účet, Autocode automaticky zpracovává ověřování mezi vaše aplikace a váš účet Google pomocí své aplikace token (viz const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})
řádek v horní části všechny koncové body).
pro aktuální dotazy obsahuje každý koncový bod uzel.js kód, který volá metodu z googlesheets.dotaz API. Tato rozhraní Api se parametr nazývá range
formátovaný v A1 notace, která odpovídá části tabulky volání API, by měl zvážit jako součást databáze.
let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });
range
hodnota A:E
je v podstatě zkratka pro „užití všech řádků ve sloupcích A až E v tabulce jako moje databáze“. Dotaz interpretuje první řádek každého sloupce v tomto rozsahu jako název pole hodnot v tomto sloupci. Vzhledem k klonované šabloně výše uvedený dotaz zkontroluje všechny hodnoty ve sloupci a (pojmenované Name
) pro řádky s hodnotou odpovídající dotazu.
tato volání API používají dotazovací jazyk KeyQL. Pokud máte zájem o hluboký ponor, můžete se podívat na další příklady.
Volání Koncové body
Jak již bylo zmíněno, tyto koncové body jsou přístupné přes HTTP, takže můžete volat jim přes fetch
cURL
, nebo cokoliv jiného HTTP klienta, který preferujete. Webový prohlížeč můžete používat přímo:
A můžete dokonce použít stejné lib-uzel, Uzel, balík, že koncové body použít k volání Google Listy Api:
Vaše koncové body bude reagovat buď GET nebo POST požadavky. Parametry jsou analyzovány z querystring pro GET požadavky a tělo požadavku pro POST požadavky. Každý koncový bod má pro přehlednost nastavené výchozí parametry. Níže naleznete příklady pro každý koncový bod.
koncové body
funkce/select/job/obsahuje.js
tento koncový bod je příkladem dotazu contains
KeyQL. Hledá řádky v propojeném listu Google, kde pole Job
obsahuje podřetězec (citlivý na malá a velká písmena) odpovídající parametru query
. Ze vzorku list, vrátí:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'
funkce/volby/born_on/date_gt.js
tento koncový bod je příkladem dotazu date_gt
KeyQL. To vypadá na řádky v propojené Google Sheet, kde Born On
pole je po query
parametr je formátován jako 2000/01/01
. Ze vzorku list, vrátí:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/born_on/date_gt/?query=2000/01/01'
funkce/volby/název/istartswith.js
tento koncový bod je příkladem dotazu istartswith
KeyQL. Hledá řádky v propojeném listu Google, kde pole Name
začíná parametrem query
(malá a velká písmena). Ze vzorku list, vrátí:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
funkce/vložit.js
tento koncový bod je příkladem vloženého dotazu. Předává vstupní parametry do parametrufieldsets
googlesheets.dotaz.vložit
API. Chcete-li například přidat Bill Gates
do tabulky, můžete provést následující žádost (všechny parametry jsou nižší-case):
$ 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/'
Poznámka:: Autocode API neodpovídají výhradně jednu metodu HTTP nad druhou, a místo toho se spoléhají na popisné pojmenování, aby nedošlo k záměně nad funkčností.
funkce/aktualizace.js
tento koncový bod je příkladem aktualizačního dotazu. Nastaví Updated At
pole lidí, jejichž jména přesně odpovídat name
parametr, a aktualizace dalších oborů na základě vstupních parametrů. Používá googlesheets.dotaz.aktualizace API.
například pro aktualizaci Job
pole Bilbo Baggins
Ring Bearer
v tabulce, můžete vytvořit následující žádosti (všechny parametry jsou nižší-case):
$ 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/'
Poznámka: To může mít vliv na více řádků, pokud více než jeden řádek odpovídá podmínkám dotazu.
funkce/Smazat.js
tento koncový bod je příkladem dotazu na odstranění. Odstraňuje Řádky
lidí, jejichž jména přesně odpovídají parametru name
. Používá googlesheets.dotaz.smazat API. Například, odstranit Bilbo Baggins
z tabulky, můžete vytvořit následující žádosti:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'
Poznámka: To může mít vliv na více řádků, pokud více než jeden řádek odpovídá podmínkám dotazu.
Děkuji!
Pokud máte nějaké dotazy nebo zpětnou vazbu, nejlepší je připojit se k kanálu Autocode Community Slack. Pozvánku můžete získat na kartě Komunita v horní liště na webu. Můžete mě také kontaktovat přímo na Twitteru @Hacubu.
Chcete-li zůstat až do dnešního dne na nejnovější z Autocode, můžete sledovat @AutocodeHQ. Šťastný hacking!