🌾

【AppSheet】REST APIの作成方法

2024/08/10に公開

Google workspace系でアプリケーションを作成するには、これまで主にスプレッドシートをDB代わりに用いてきましたが、GASで自作クエリを作成するのはいろいろ面倒ですし、データの取得や書き込みが非常に遅いです。

今回ふと思い立ってAppSheetをDBとして使ったところ、実装の手間もそれほどかからず動作も早かったので、非常に便利だということがわかりました。

公式ドキュメントはこちら
https://support.google.com/appsheet/topic/10105767?hl=en&ref_topic=10101404&sjid=4235716407689701435-AP

ですが、公式ドキュメントはなかなかわかりづらいので、メモとして残します。

DBの作成

1. 注文履歴

2. 注文アイテム

3. 備品マスタ

必ずやっておくこと
AppSheetエディタで、各テーブルをDataに加えておく必要があります。
(これをやらないと、REST APIを実行しても何も書き込めず返されません。)

REST APIの作成

共通

setting > integrationsでApp Idを確認することができます。
また、Access Keyを発行することができます。

これらは以下のREST APIで使うことになります。

const APP_ID = "7b6b4413-ec3a-4d5d-b9d0-*******"
const ACCESS_KEY = "V2-************************"

CREATE

payloadのActionは"Add"を指定します。

function create注文アイテム() {
  const TABLE_NAME = "注文アイテム"
  
  const url = `https://www.appsheet.com/api/v2/apps/${APP_ID}/tables/${TABLE_NAME}/Action?applicationAccessKey=${ACCESS_KEY}`

  const rows = [
    {"アイテムコード":'item0002',"備品コード":'ballpen',"備品名":'黒色ボールペン',"金額":2000}
  ]

  const payload = {
    "Action":"Add",
    "Properties":{
      "Locale":"ja-JP"
    },
    "Rows":rows
  }

  const options = {
    "method":"post",
    "contentType":"application/json",
    "payload":JSON.stringify(payload)
  }

  UrlFetchApp.fetch(url,options)

}

READ

payloadのActionは"Find"を指定します。
selectorに色々な検索式を入れることができます。
下の例では、「備品マスタ」テーブルの「格納場所」列に「実験室」が入っているレコードだけを取り出しています。

function get備品マスタ(){
  const TABLE_NAME = "備品マスタ"
  const url = `https://www.appsheet.com/api/v2/apps/${APP_ID}/tables/${TABLE_NAME}/Action?applicationAccessKey=${ACCESS_KEY}`

  const payload = {
    "Action":"Find",
    "Properties":{
      "Locale":"ja-JP",
      "Selector": "FILTER('備品マスタ', IN('実験室', [格納場所]))"
    }
  }

  const options = {
    "method":"post",
    "contentType":"application/json",
    "payload":JSON.stringify(payload)
  }

  try {
    const res = UrlFetchApp.fetch(url, options);
    const responseText = res.getContentText();
    console.log("Response Data: ", responseText);
  } catch (error) {
    console.error("Error: " + error.toString());
  }
}

UPDATE

更新は一レコードずつではなく、まとめて更新します(以下の例ではrowsに入れています)

「注文アイテム」テーブルでは、「アイテムコード」がkeyとなっています。
更新すべきレコードは「アイテムコード」を指定していますので、APIはそのアイテムコードを手掛かりに該当するレコードを更新します。

function update注文アイテム(){
  const TABLE_NAME = "注文アイテム"
  
  const url = `https://api.appsheet.com/api/v2/apps/${APP_ID}/tables/${TABLE_NAME}/Action?applicationAccessKey=${ACCESS_KEY}`

  const rows = [
    {"アイテムコード":'item0003',"備品コード":'ballpen',"備品名":'黒色ボールペン',"金額":3000}
  ]

  const payload = {
    "Action":"Edit",
    "Properties":{
      "Locale":"ja-JP"
    },
    "Rows":rows
  }

  const options = {
    "method":"post",
    "contentType":"application/json",
    "payload":JSON.stringify(payload)
  }

  UrlFetchApp.fetch(url,options)
}

Discussion