エンジニアになりたい人募集!X(旧Twitter)からフォローしたらリプライで質問常時OK!

【GAS】GASでGET/POSTの受取データを処理するベストプラクティス

この記事はで読むことができます。

はじめに

この記事をまとめたときにGASのPOST受け取り仕様が複雑だと感じたものの、解説されているサイトが少なかったため、GETと併せてPOSTされたデータを受け取る方法をまとめました。

この記事では以下のステップでコードを解説しています。

1. GET

リクエスト内容

https://script.google.com/macros/s/{デプロイ ID}/exec/sample?name=test&n=1&n=2

URLからパラメータを取得

全ての変数を文字列として取得

eventParameter.queryStringを使用

gas
function doGet(e){
  Logger.log(e.queryString);
}
// 出力: "name=test&n=1&n=2"

変数をオブジェクト型で取得し、1つめの値のみ取得

eventParameter.parameterを使用

gas
function doGet(e){
  Logger.log(e.parameter);
}
// 出力: { name:"test", n:1 }

変数をオブジェクト型で取得し、全ての値を配列として取得

eventParameter.parametesを使用

gas
function doGet(e){
  Logger.log(e.parametes);
}
// 出力: { name:["test"], n:[1, 2] }

URLからパスを取得

exec/ 以下のパスを取得

eventParameter.pathInfoを使用

gas
function doGet(e){
  Logger.log(e.pathInfo);
}
// 出力: "sample"

fetchでのリクエストの場合、正常に取得できないことを確認しています

2. POST

form-data形式でPOSTされた内容を取得

GASでHTTPリクエストした場合のオプション設定
gas
const options = {
  method: "POST",
  payload: {
    name:"test",
    n:1
  }
}

オブジェクト形式で取得

eventParameter.parameterを使用

gas
function doPost(e){
  Logger.log(e.parameter);
}
// 出力: { name:"test", n:1 }

JSON形式でPOSTされた内容を取得

GASでHTTPリクエストした場合のオプション設定
gas
const options = {
  "method": "POST",
  "payload": JSON.stringify({
    name:"test",
    n:1
  })
}

1つの文字列として取得

eventParameter.postData.contentsを使用

gas
function doPost(e){
  Logger.log(e.postData.contents);
  Logger.log(JSON.parse(e.postData.contents));
}
// 出力: "{"name":"test","n":"1"}"
// 出力: { name:"test", n:1 }

【番外編】

配列をデータに含めてPOSTする場合

POST前にString()で配列を文字列に変換し、POST後にarray.split(',')で配列に戻す

form-data形式 / JSON形式 どちらも配列の処理方法は同じです

GASでHTTPリクエストした場合のオプション設定
gas
const options = {
  method: "POST",
  payload: {
    name:"test",
    n:String([1, 2])
  }
}
gas
function doPost(e){
  Logger.log(e.parameter.n.split(','));
}
// 出力: [1, 2]

まとめ

GASでGET/POSTの受取データを処理する方法を解説しました。
リクエストパラメータを利用すると出来ることに幅がでますので、ぜひ活用してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)