110
99

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Apps ScriptのdoPostでJSONなパラメータのPOSTリクエストを受ける

Last updated at Posted at 2018-03-18

Google Apps Script(GAS)は HTTPSリクエストを受け取り処理を行うというサーバレスなAPIサーバを導入することができる。(参考: Web Apps  |  Apps Script  |  Google Developers
それを使って、JSONフォーマットで記述されたリクエストパラメータでPOSTリクエストを送り、何かしらやろうとしたところ少しハマった。

JSONパラメータを受けparseする

例えばこんなリクエストを送った場合を想定。リクエストパラメータをJSONフォーマットで記述されている。

curl -X POST -H "Content-Type: application/json" -d '{"value": "AAA"}' <GASウェブアプリケーションのURL>

このような時は以下のように書くことでリクエストパラメータをオブジェクトで受けることができる。

function doPost(e) {
  var params = JSON.parse(e.postData.getDataAsString());  // ※
  var value = params.value;  // => "AAA"が取れる
  
  // 何らかの処理...
  
  var output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.JSON);
  output.setContent(JSON.stringify({ message: "success!" }));
  
  return output;
}

少し解説すると、コード内 を付けているところが今回のキモ。
Content-Type: application/json を付けているものの、GAS的にはそれを見ていない(?)ようで e.postDataFileUploadクラスになっており、これはblobクラスを継承したクラス。
なので、.getDataAsString()メソッドでJSON文字列を得ることができ、それをJSON.parseすることでJavaScriptのオブジェクトに変換している、ということを行っている。

ちなみに

以下のように e.parameter を使うと何も取れないので注意。おそらくこの parameter は"クエリパラメータ"のことだと思われる。

function doPost(e) {
  var value = e.parameter.value;
  
  console.log(e.parameter);  // => 空オブジェクト( {} )
  console.log(value);        // => undefined
  ...
}
110
99
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
110
99

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?