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?)を書く方には常識かもしれないのですが僕はハマってしまいました。