GASでPOSTリクエストを受け取るGASエンドポイントの作成

先生

GASで外部からのPOSTリクエストを華麗に処理!Web連携をスマートに実現するテクニックを伝授します。

GASでPOSTリクエストを受け取るエンドポイントを作成する方法

Google Apps Script (GAS) を使用して、外部からのPOSTリクエストを受け付けるエンドポイントを作成する方法を解説します。これにより、他のアプリケーションやサービスからGASの関数を呼び出し、データを連携させることが可能になります。

例えば、ウェブサイトのフォームからデータを送信したり、API経由で情報を更新したりする際に役立ちます。GASは手軽に利用できるため、小規模なWebアプリケーションや自動化処理に最適です。

この記事では、基本的なPOSTリクエストの受け取り方から、データの解析、レスポンスの返却まで、具体的なコード例を交えながら説明します。

GASプロジェクトの作成とデプロイ

まず、GASプロジェクトを作成します。Google Driveを開き、「新規」→「その他」→「Google Apps Script」を選択します。新しいスクリプトエディタが開きます。

次に、以下のコードを記述します。これは、POSTリクエストを受け付けるための基本的な関数です。


javascript
function doPost(e) {
  // POSTリクエストのパラメータを取得
  var params = e.parameter;

  // パラメータの内容をログに出力(デバッグ用)
  Logger.log(JSON.stringify(params));

  // ここで何らかの処理を行う(例:スプレッドシートに書き込む)
  // 例:SpreadsheetApp.openById('スプレッドシートID').getSheetByName('シート名').appendRow([params.name, params.email]);

  // レスポンスを返す
  return ContentService.createTextOutput(JSON.stringify({'result': 'success'})).setMimeType(ContentService.MimeType.JSON);
}

上記のコードでは、doPost(e)関数がPOSTリクエストを受け取るためのエントリーポイントとなります。e.parameterでリクエストパラメータを取得し、Logger.log()でパラメータの内容をログに出力します。必要に応じて、取得したデータに対する処理を追加してください。

コードを保存したら、GASプロジェクトをデプロイします。「公開」→「ウェブアプリケーションとして導入…」を選択します。

「次のユーザーとしてアプリケーションを実行」は「自分」を選択し、「アクセスできるユーザー」は「全員」を選択します。これにより、誰でもこのエンドポイントにアクセスできるようになります。(本番環境では適切なアクセス制御を設定してください。)

「導入」ボタンをクリックすると、ウェブアプリケーションのURLが生成されます。このURLが、POSTリクエストを送信するためのエンドポイントになります。

POSTリクエストの送信例(Python)

ここでは、Pythonを使ってGASエンドポイントにPOSTリクエストを送信する例を示します。


python
import requests
import json

# GASエンドポイントのURL
url = 'あなたのGASのURL'

# 送信するデータ
data = {
    'name': '太郎',
    'email': 'taro@example.com'
}

# JSON形式に変換
json_data = json.dumps(data)

# ヘッダーの設定 (Content-Typeをapplication/jsonにする)
headers = {'Content-Type': 'application/json'}

# POSTリクエストを送信
response = requests.post(url, data=json_data, headers=headers)

# レスポンスの確認
print(response.status_code)
print(response.text)

上記のPythonコードでは、requestsライブラリを使用してPOSTリクエストを送信しています。dataに送信したいパラメータを辞書形式で格納し、json.dumps()でJSON形式に変換しています。

重要なのは、Content-Typeヘッダーをapplication/jsonに設定することです。これにより、GAS側でJSON形式のデータとして正しく解析されます。

GAS側でe.postData.contentsで取得する必要がある場合もあります。その際は、e.parameterではなくe.postData.contentsを使用し、JSONとしてパースしてください。


javascript
function doPost(e) {
  var jsonData = JSON.parse(e.postData.contents);
  Logger.log(jsonData.name);
  Logger.log(jsonData.email);

  return ContentService.createTextOutput(JSON.stringify({'result': 'success'})).setMimeType(ContentService.MimeType.JSON);
}

エラーハンドリングとセキュリティ

GASエンドポイントを運用する際には、エラーハンドリングとセキュリティに注意する必要があります。

例えば、リクエストパラメータが不足している場合や、データの形式が不正な場合に備えて、エラー処理を実装することが重要です。


javascript
try {
  // パラメータの取得と処理
  var name = e.parameter.name;
  var email = e.parameter.email;

  if (!name || !email) {
    throw new Error('Missing parameters');
  }

  // ...

} catch (e) {
  Logger.log(e);
  return ContentService.createTextOutput(JSON.stringify({'result': 'error', 'message': e.message})).setMimeType(ContentService.MimeType.JSON);
}

また、GASエンドポイントは公開URLであるため、悪意のあるアクセスから保護する必要があります。APIキーや認証トークンを使用するなどして、アクセスを制限することを検討してください。

さらに、リクエストの送信元を制限するために、IPアドレスによるフィルタリングも有効です。ただし、GAS自体にはIPアドレスを直接確認する機能はないため、リクエストヘッダーを利用するなどの工夫が必要になる場合があります。

参考リンク

まとめ

GASでPOSTリクエストを受け付けるエンドポイントを作成することで、外部システムとの連携が容易になります。Pythonなどのプログラミング言語を使ってデータを送信し、GASで処理することで、様々な自動化処理を実現できます。

エラーハンドリングやセキュリティ対策をしっかりと行い、安全で信頼性の高いGASエンドポイントを構築しましょう。