
【GAS】APIを叩いてPOSTでJSONを送信したり、その通信をPostmanでエミュレートしてみたり
GASからAPIのエンドポイントへアクセスして、POSTで情報送信出来るようにしたいの巻きです。
結論
// データベース登録用会員データ.gs
// sample
class 会員データ{
constructor(名前, 電話番号, メールアドレス){
this.name = 名前;
this.tel = 電話番号;
this.mail = メールアドレス;
}
JSONとして取得(){
return stringify(this)
}
}
// APIアクセス.gs
// 会員データクラスのインスタンスを作成してからAPIアクセスクラスに渡す
function APIアクセス(会員データ){
const url = "https://[APIのURI]";
const payload = 会員データ.JSONとして取得()
const headers = { "Content-Type" : "application.json" }
const options = {
"method" : "POST",
"headers" : headers,
"payload" : payload
}
const response = UrlFetchApp.fetch(url, options);
const json_response = JSON.parse(response);
}
やってることのせつめい
・送信したいデータ構造をクラスで定義して、入力した情報を使ってインスタンスを作れるようにしておく
・クラス内に、自身をJSONとして取得出来るようにしておくと便利
・APIアクセスの際は、headers内にContent-Typeを指定して、application.jsonを設定しておく
・payloadはjsonをそのまま渡す
・UrlFetchApp.fetch(url, options); でAPIを叩く
・レスポンスをJSON化して取り扱えるようにする
……という一連のアクセスをPostmanでシミュレーションする
ローカルで開発してるAPI、アクセステストしづらい問題。
Postmanを使うことで、ローカルPC内でアクセステストが完結するので大変楽になります。
というわけで、「GASから送った情報をAPIで受け取って云々する」というものを作成する際に、GASから送られてくる情報をPostmanでエミュレート出来るようにします。
といっても別にGASからだから特別な情報がくっついてくるとかはないので、「POST通信でJSON送る」の設定が出来ていれば問題ないです。たぶん。(たぶん)
・新しいリクエストを作成し、メソッドをPOSTにして、URIを設定する
・「ヘッダー」タブ内のCotntent-Typeを「application/json」に設定する
・「ボディ」タブ内のラジオボタンで「Raw」を選択する
・ラジオボタンの右端にあるドロップダウンを「JSON」にする
・ここでGASの画面に戻り、会員データを作成してJSONとして取得メソッドを噛ましたものをconsole.logで出力してコピーする
・Postmanに戻り、ボディタブの入力欄にペーストする
これでGASから送信するのとほぼ同じ情報でローカル起動したAPIへアクセステストできるようになる、はずです。