酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Cloud Functions for FirebaseでGETリクエストとPOSTリクエストでパラメータを取得する

Cloud Functions経由でFirestoreにアクセスできるようになったのにとても気分を良くしたので、この調子でCloud Functions for Firebaseの使い方を学んでいきたいと思います。

今回は、Cloud Functions for Firebaseで定義したHTTPトリガーで、GETとPOSTリクエストそれぞれでパラメータを取得する方法を調査しました。

GETリクエストの場合

GETリクエストの場合は下記のようなサンプルプログラムを用意しました。

export const getGetParams = functions.https.onRequest(async (request, response) => {
  if (request.method !== 'GET') {
    response.status(400).send("error1") 
  }
  if (request.query.date === undefined) {
    response.status(400).send("error2")
  }
  response.send(`date: ${request.query.date}`)
});

https://us-central1-PROJECT_NAME.cloudfunctions.net/getParams?date=20191231 にアクセスすると、下記のレスポンスが表示されます。

date: 20191231

パラメータなしの https://us-central1-PROJECT_NAME.cloudfunctions.net/getParams にアクセスするとエラーが表示されます。

error2

POSTの場合

POSTリクエストの場合は下記のようなサンプルプログラムを用意しました。

export const getPostParams = functions.https.onRequest(async (request, response) => {
  if (request.method !== 'POST') {
    response.status(400).send("error1") 
  }
  if (request.body.date === undefined) {
    response.status(400).send("error2")
  }
  response.send(`date: ${request.body.date}`)
});

下記の内容でリクエストを送ると……

https://us-central1-PROJECT_NAME.cloudfunctions.net/getPostParams
Content-Type: application/x-www-form-urlencoded
date=20200102

このようなレスポンスを得ることができます。

date: 20200102

リクエストヘッダーにContent-Typeを含めているのがポイントで、公式ドキュメントの「リクエストからの値の読み込み」にも書かれているように適切なコンテンツタイプを指定しておく必要があります。

このあたりTypeScript(JS?)を書く方には常識かもしれないのですが僕はハマってしまいました。

参考記事

関連記事