🌾
【AppSheet】REST APIの作成方法
Google workspace系でアプリケーションを作成するには、これまで主にスプレッドシートをDB代わりに用いてきましたが、GASで自作クエリを作成するのはいろいろ面倒ですし、データの取得や書き込みが非常に遅いです。
今回ふと思い立ってAppSheetをDBとして使ったところ、実装の手間もそれほどかからず動作も早かったので、非常に便利だということがわかりました。
公式ドキュメントはこちら
ですが、公式ドキュメントはなかなかわかりづらいので、メモとして残します。
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