chociaż technologia baz danych i inne narzędzia przeszły długą drogę, wciąż trudno jest pokonać wszechstronność i intuicyjność skromnego arkusza kalkulacyjnego. Podczas gdy używanie ich do wrażliwych, krytycznych aplikacji, takich jak przechowywanie danych pacjentów COVID-19, nie jest zalecane, fakt, że każdy wie, jak korzystać z arkusza kalkulacyjnego, oznacza, że są one idealne do mniejszych projektów wielofunkcyjnych, w których nie-programista może potrzebować zbadać lub edytować dane.
w tym przewodniku pokażę Ci, jak używać Arkuszy Google jako bazy danych, wraz z interfejsem API dostępnym przez HTTP. Użyjemy Autocode, węzła.platforma programistyczna i edytor JS API z wbudowanym autouzupełnianiem, do wdrożenia prostej aplikacji i obsługi procesu uwierzytelniania Google. Zbadam również ograniczenia Arkuszy Google, w tym skalowalność, i gdzie warto zacząć szukać bardziej złożonych alternatyw.
# 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'
aby rozpocząć, nie potrzebujesz niczego innego niż konto Google i bezpłatne konto Autocode. Idziemy!
najpierw musisz sklonować własną kopię szablonu arkusza Google, klikając tutaj, a następnie naciskając Użyj szablonu w prawym górnym rogu. Spowoduje to dodanie przykładowego arkusza kalkulacyjnego do osobistego konta Google.
gdy już to zrobisz, kliknij tutaj, aby otworzyć aplikację starter w Autocode. Przeglądaj kod źródłowy, jeśli chcesz, a następnie zainstaluj aplikację na swoim koncie Autocode, naciskając zielony przycisk. Gdy pojawi się monit o połączenie arkusza Google, postępuj zgodnie z instrukcjami w przepływie, aby połączyć konto Google, a następnie wybierz właśnie sklonowany arkusz kalkulacyjny.
Po tym, Twoja aplikacja powinna być gotowa do pracy! Spróbuj uzyskać dostęp do kilku punktów końcowych za pomocą ich adresów URL i zobacz, co jest zwracane/co dzieje się z nową bazą danych arkusza kalkulacyjnego. Możesz sprawdzić poniżej sekcjęEndpoints
, gdzie znajdziesz przykładowe wywołania.
ograniczenia
to TL;dr było łatwe, prawda? Dlaczego więc nie wszystko jest zbudowane na Arkuszach Google?
podczas gdy backend, który zajmuje 30 sekund, aby skonfigurować i że każdy może wchodzić w interakcje jest niezwykle atrakcyjny, istnieją pewne oczywiste ograniczenia. Arkusz kalkulacyjny jako baza danych, jak opisano powyżej, w naturalny sposób nie obsługuje wielu tabel ani relacji między wierszami. Nie ma również koncepcji wymuszania typów dla danej kolumny, transakcji, wbudowanych kopii zapasowych lub szyfrowania, więc poufne/krytyczne dane (takie jak dane pacjentów COVID-19) prawdopodobnie najlepiej są przechowywane gdzie indziej.
pod względem skalowalności Arkusze Google mają twardy limit 5 000 000 komórek (w tym pustych komórek). Kiedy próbowałem to zweryfikować, tworząc arkusz kalkulacyjny z taką liczbą wartości, napotkałem jednak znaczące problemy z wydajnością przed tym progiem:
masowe operacje, takie jak wklejanie dużej liczby komórek spowolniły, a następnie zaczęły zawodzić przy około 1m komórkach. Nawigacja była na ogół powolna.
moje eksperymenty wokół tworzenia wywołań API przyniosły podobne wyniki. Szybkość zapytań zdawała się skalować liniowo z liczbą komórek:
zapytania stały się niepraktycznie wolne wokół znaku 500 000 komórek, ale nadal były poniżej 2 sekund dla zapytania 100 000 komórek. Dlatego, jeśli przewidujesz zbiór danych większy niż kilkaset tysięcy komórek, prawdopodobnie mądrze byłoby wybrać bardziej skalowalną opcję.
Jak to działa
gdy połączysz sklonowany arkusz Google z aplikacją i zainstalujesz go na swoim koncie, Autocode automatycznie obsługuje uwierzytelnianie między aplikacją a kontem Google za pomocą tokena aplikacji (patrz liniaconst lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})
u góry wszystkich punktów końcowych).
dla rzeczywistych zapytań każdy punkt końcowy zawiera węzeł.kod js wywołujący metodę z arkuszy googlesheets.API zapytań. Te interfejsy API przyjmują parametr o nazwie range
sformatowany w notacji A1, który odpowiada części arkusza kalkulacyjnego, którą wywołanie API powinno uznać za część bazy danych.
let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });
arange
wartośćA:E
jest zasadniczo skrótem od „użyj wszystkich wierszy w kolumnach od A do E w arkuszu kalkulacyjnym jako mojej bazy danych”. Zapytanie interpretuje pierwszy wiersz każdej kolumny w tym zakresie jako nazwę pola wartości w tej kolumnie. Biorąc pod uwagę szablon, który sklonowałeś, powyższe zapytanie sprawdzi wszystkie wartości w kolumnie a (o nazwie Name
) dla wierszy o wartości pasującej do zapytania.
te wywołania API używają języka zapytań KeyQL. Jeśli jesteś zainteresowany głębokim nurkowaniem, możesz to sprawdzić po więcej przykładów.
wywoływanie punktów końcowych
jak już wcześniej wspomniano, te punkty końcowe są dostępne przez HTTP, dzięki czemu można do nich nawiązywać połączenia poprzezfetch
cURL
lub jakikolwiek inny klient HTTP, który preferujesz. Możesz użyć przeglądarki internetowej bezpośrednio:
i możesz nawet użyć tego samego pakietu węzłów lib-node, którego punkty końcowe używają do wywoływania interfejsów API Arkuszy Google:
twoje punkty końcowe odpowiedzą na żądania GET lub POST. Parametry są parsowane z querystring dla żądań GET i ciała żądania dla żądań POST. Każdy punkt końcowy ma domyślne parametry ustawione dla jasności. Przykłady dla każdego punktu końcowego można znaleźć poniżej.
punkty końcowe
funkcje/select/job/contains.js
ten punkt końcowy jest przykładem zapytania KeyQLcontains
. Szuka wierszy w połączonym arkuszu Google, gdzie poleJob
zawiera podłańcuch (rozróżnia duże/małe litery) pasujący do parametru query
. Z przykładowego arkusza zwraca:
$ 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
ten punkt końcowy jest przykładem zapytania KeyQLdate_gt
. Szuka wierszy w połączonym arkuszu Google, gdzie poleBorn On
znajduje się po parametrzequery
sformatowanym jako2000/01/01
. Z przykładowego arkusza zwraca:
$ 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
ten punkt końcowy jest przykładem zapytania KeyQListartswith
. Szuka wierszy w połączonym arkuszu Google, gdzie poleName
zaczyna się od parametru query
(wielkość liter nie ma znaczenia). Z przykładowego arkusza zwraca:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
functions/insert.js
ten punkt końcowy jest przykładem zapytania insert. Przekazuje parametry wejściowe dofieldsets
parametru googlesheets.zapytanie.Wstaw
API. Na przykład, aby dodać Bill Gates
do arkusza kalkulacyjnego, możesz wykonać następujące żądanie (wszystkie parametry są małe litery):
$ 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/'
Uwaga: Autocode API nie reagują wyłącznie na jedną metodę HTTP nad inną, a zamiast tego polegają na opisowym nazewnictwie, aby uniknąć nieporozumień dotyczących funkcjonalności.
funkcje/Aktualizacja.js
ten punkt końcowy jest przykładem zapytania aktualizacyjnego. Ustawia poleUpdated At
osób, których nazwiska dokładnie pasują do parametruname
i aktualizuje inne pola na podstawie parametrów wejściowych. Korzysta z googlesheets.zapytanie.zaktualizuj API.
na przykład, aby zaktualizować Job
pole Bilbo Baggins
do Ring Bearer
w arkuszu kalkulacyjnym, możesz wykonać następujące żądanie (wszystkie parametry są małe litery):
$ 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/'
Uwaga: Może to mieć wpływ na wiele wierszy, jeśli więcej niż jeden wiersz odpowiada warunkom zapytania.
funkcje/delete.js
ten punkt końcowy jest przykładem zapytania delete. Usuwa wiersze
osób, których nazwy dokładnie odpowiadają parametrowiname
. Korzysta z googlesheets.zapytanie.Usuń API. Na przykład, aby usunąćBilbo Baggins
z arkusza kalkulacyjnego, możesz złożyć następujące żądanie:
$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'
Uwaga: Może to wpłynąć na wiele wierszy, jeśli więcej niż jeden wiersz odpowiada warunkom zapytania.
Dziękuję!
Jeśli masz jakieś pytania lub uwagi, najlepiej jest dołączyć do społeczności Autocode. Możesz otrzymać zaproszenie z karty społeczności w górnym pasku na stronie internetowej. Możesz również skontaktować się ze mną bezpośrednio na Twitterze @Hacubu.
Jeśli chcesz być na bieżąco z najnowszymi informacjami z Autocode, możesz śledzić @AutocodeHQ. Szczęśliwego hakowania!