概要
ノーコードツールでもAPI連携ができることにより、データをPOSTで他のシステムに送る機会が増えてきたと思います。
しかし、APIの送信はそのツールからできるから良いものの、受信先については別途用意しなければならず、非エンジニアの場合は「大変そうだ…」という感想を抱くと思います。
しかし、実は使い慣れている(であろう)スプレッドシートを送信先として使うことができるため、方法を紹介します。
方法
① まず、新規のスプレッドシートを作成し、名前などを設定した後、[拡張機能]から[Apps Script]を開きます。
② 次に名前を設定後、コードを入力し、保存ボタンを押します
(コードについては画像の後にあるため、コピペして下さい)。
// doPost関数は、ウェブアプリケーションにPOSTリクエストが行われるたびにトリガーされます
function doPost(e) {
// 起動中のスプレッドシート内の現在アクティブなシートを取得します
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 受信したPOSTリクエストからpostDataをパース(解析)します
const data = JSON.parse(e.postData.contents);
// アクティブなシートの最大カラム数を取得し、最初の行からヘッダーを取得します
let headers = sheet.getRange(1, 1, 1, sheet.getMaxColumns()).getValues()[0];
// 各ヘッダーを、受信したPOSTデータの対応する値にマッピングします。もしデータに特定のキーが存在しない場合は、空文字列を挿入します
let dataList = headers.map(header => data[header] || "");
// 受信したPOSTデータからマッピングしたデータを用いて、新たな行を追加します
sheet.appendRow(dataList);
}
③ 保存が完了したら右上の[デプロイ]ボタンの中から、[新しいデプロイ]をクリックします。
④ [ウェブアプリ]を選択し、説明文をよしなに入れた後、アクセスできるユーザーを[全員]にします。
⑤ 完了した後、下記の画面ができるのでウェブアプリのURLをコピーします。
⑥ スプレッドシートに戻り、取得するキー名を設定しておきます。
テストでは"name":"test", "value2":"hogehoge", "value1":"hoge"
と記録したかったので下記にしました。
※キーの順が違ってもシートのカラム名を参照して入力されてほしかったのであえてvalue2を1より先にしています。
これで完成です!
検証
ぶじにPOSTして反映されるかを確認します。
Macの場合はターミナル、Windowsの場合はコマンドプロンプトに下記のコマンドをコピーし、任意のキーや値、先ほど取得したウェブアプリURLに差し替えて送信します、
curl -X POST -H "Content-Type: application/json" -d '{"[key]":"[value]"}' [スプレッドシートのウェブアプリURL]
自分の場合は下記となります。
エンターを押すと、スプレッドシートに下記の通りに入りましたので想定通りです!
さいごに
API連携は難しいことのように感じておりましたが、ものの数分でデータ取得が出来ると分かり少し拍子抜けしました。
とは言えスプレッドシートですので重要な本番データをこれでやってよいかは一考の余地がありますが、小規模サービスの場合や、重要すぎるデータでなければこれで行う選択肢もありかとは思います。