Googleスプレッドシートをデータベースとして使用する方法(責任を持って)

データベース技術やその他のツールは長い道のりを歩んできましたが、謙虚なスプ COVID-19患者データの保存など、機密性の高い重要なアプリケーションに使用することはお勧めできませんが、スプレッドシートの使用方法を誰もが知っていこのガイドでは、HTTP経由でアクセス可能なAPIインターフェイスを備えた、Google Sheetsをデータベースとして使用する方法を紹介します。 ノードであるAutocodeを使用します。js API開発プラットフォームとエディタ内蔵のオートコンプリート、シンプルなアプリを展開し、Googleの認証プロセスを処理します。 また、拡張性を含むGoogle Sheetsの制限と、より複雑な代替案を検討することが理にかなっている場所についても説明します。p>

# 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'

始めるには、Googleアカウントと無料のオートコードアカウント以外は必要ありません。 行くぞ!

まず、ここをクリックしてテンプレートGoogleシートの独自のコピーを複製し、右上のテンプレートを使用を押す必要があります。 これにより、個人用のGoogleアカウントにサンプルスプレッドシートが追加されます。 これを完了したら、ここをクリックしてAutocodeでstarterアプリを開きます。 あなたがしたい場合は、緑のボタンを押して、あなたのオートコードアカウントにアプリをインストールし、ソースコードの周りを突く。 Googleシートをリンクするように求められたら、フローの指示に従ってGoogleアカウントをリンクし、複製したスプレッドシートを選択します。その後、あなたのアプリは行く準備ができているはずです!

その後、あなたのアプリは行く準備ができているはずです! Urlを介していくつかのエンドポイントにアクセスし、新しいスプレッドシートデータベースに何が返されるか、何が起こるかを確認してみてください。 あなたはチェックアウトすることができますEndpoints例の呼び出しのための以下のセクション。

制限

そのtl;drは簡単でしたよね? では、なぜすべてがGoogleシート上に構築されていないのですか?

セットアップするのに30秒かかり、誰もが対話できるバックエンドは非常に魅力的ですが、いくつかの明白な制限があります。 上記のように、データベースとしてのスプレッドシートは、当然、複数のテーブルや行間のリレーションシップをサポートしていません。 また、特定の列、トランザクション、組み込みのバックアップ、または暗号化にタイプを強制する概念もないため、機密/重要なデータ(COVID-19患者データなど)は

スケーラビリティの面では、Googleスプレッドシートには5,000,000セル(空白セルを含む)のハード制限があります。 しかし、その多くの値を持つスプレッドシートを作成してこれを検証しようとしたとき、そのしきい値の前にパフォーマンスに重大な問題が発生しました。

多数のセルを貼り付けるような大量操作が遅くなり、約1mのセルで失敗し始めました。 航法は全般的に低迷していた。

API呼び出しに関する私の実験でも同様の結果が得られました。 クエリの速度は、セルの数に応じて直線的にスケールするように見えました:

クエリは500,000セルマークの周りでは実用的に遅くなりましたが、100,000セルクエリではまだ2秒未満でした。 したがって、数十万セルを超えるデータセットが予想される場合は、よりスケーラブルなオプションを選択することが賢明でしょう。

How It Works

複製したGoogleシートをアプリにリンクしてアカウントにインストールすると、アプリのトークンを使用してアプリとGoogleアカウントの間の認証が自動的に処理されます(すべてのエンドポイントの上部にあるconst lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})行を参照してください)。

実際のクエリの場合、各エンドポイントにはノードが含まれます。googlesheetsからメソッドを呼び出すjsコード。クエリAPI。 これらのApiは、API呼び出しがデータベースの一部として考慮する必要があるスプレッドシートの部分に対応するA1表記でフォーマットされたrange

let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });

ArangeA:Eの値は、基本的に”スプレッドシートの列AからEのすべての行をデータベースとして使用する”の省略形です。 クエリは、その範囲内の各列の最初の行を、その列の値のフィールド名として解釈します。 複製したテンプレートを指定すると、上記のクエリは、クエリに一致する値を持つ行のa列(Name)のすべての値をチェックします。

これらのAPI呼び出しは、KeyQLクエリ言語を使用します。 あなたは深いダイビングに興味があるなら、あなたはより多くの例のためにそれをチェックアウトすることができます。

呼び出しエンドポイント

前述のように、これらのエンドポイントはHTTP経由でアクセスできるため、fetchcURL、または他のHTTPクライアントを介して呼び出しを行うことができます。 Webブラウザを直接使用することができます:また、エンドポイントがGoogle Sheets Apiを呼び出すために使用するのと同じlib-nodeノードパッケージを使用することもできます。

エンドポイントはGETリクエストまたはPOSTリクエストに応答します。 パラメータは、GET要求の場合はquerystringから、POST要求の場合は要求本文から解析されます。 各エンドポイントには、わかりやすくするために既定のパラメータが設定されています。 以下の各エンドポイントの例を見つけることができます。

エンドポイント

関数/select/job/contains。js

このエンドポイントは、containsKeyQLクエリの例です。 リンクされたGoogleシートで、Jobquery。 サンプルシートから、

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'

functions/select/born_on/date_gt。このエンドポイントは、date_gtKeyQLクエリの例です。 リンクされたGoogleシートの行を検索します。Born Onquery2000/01/01 サンプルシートから、

$ 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

このエンドポイントは、istartswithKeyQLクエリの例です。 リンクされたGoogleシートの行を検索します。Namequeryパラメータ(大文字と小文字を区別し サンプルシートから、次の値が返されます。

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'

関数/挿入。js

このエンドポイントは、挿入クエリの例です。 入力パラメータをgooglesheetsのfieldsetsパラメータに渡します。クエリ。APIを挿入します。 たとえば、スプレッドシートにBill Gatesを追加するには、次の要求を行うことができます(すべてのパラメータは小文字です)。

$ 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/'

注: オートコードApiは、あるHTTPメソッドを別のメソッドよりも排他的に応答するのではなく、機能の混乱を避けるために説明的な名前付けに依存します。

関数/更新。js

このエンドポイントは、更新クエリの例です。 これは、名前がnameUpdated Atフィールドを設定し、入力パラメータに基づいて他のフィールドを更新します。 それはgooglesheetsを使用しています。クエリ。APIを更新します。
たとえば、スプレッドシートのBilbo BagginsJobRing Bearerに更新するには、次の要求を行います(すべてのパラメータは小文字です)。

$ 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/'

注:複数の行がクエリ条件に一致する場合、これは複数の行に影響を与える可能性があります。

関数/削除。js

このエンドポイントは、削除クエリの例です。 これは、名前がnameパラメータと正確に一致する人の行を削除します。 それはgooglesheetsを使用しています。クエリ。APIを削除します。 たとえば、スプレッドシートからBilbo Bagginsを削除するには、次の要求を行うことができます。

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'

注:複数の行がクエリ条件に一致する場合、これは複数の行に影響する可能性があります。

ありがとうございました!

ありがとうございました質問やフィードバックがある場合は、Autocode community Slackチャンネルに参加することをお勧めします。 Webサイトのトップバーにある[コミュニティ]タブから招待を取得できます。 また、Twitter@Hacubuで直接私に手を差し伸べることができます。あなたはAutocodeから最新の状態に滞在したい場合は、@AutocodeHQをフォローすることができます。

あなたはAutocodeから最新の状態に滞在したい場合は、@AutocodeHQに従うことがで ハッピーハッキング!

コメントを残す

メールアドレスが公開されることはありません。