MENU

Cloud Functions で HTTP 関数のリクエストパラメータ( GET / POST )を受け取る

Cloud Functions の Python は、裏側で Flask フレームワークが動いています。

HTTP フレームワーク | Google Cloud

Cloud Functions の Python では、この Flask フレームワークの request メソッドを使用して、クライアントアプリから GET や POST のリクエストパラメータを受け取ることが出来ます。

リクエストパラメータ
  • GET メソッド:クエリパラメータ(クエリ文字列、URL パラメータ)
  • POST メソッド:リクエストボディ

この記事では、flask.requestを使用して、リクエストメソッドごとに Cloud Functions でリクエストパラメータを取得する方法を紹介します。

目次

GET メソッド

HTTP GET で送られてきたデータ(クエリパラメータ)は、Flask の request.args で受け取ることが出来ます。

https://{REGION}-{PROJECT_ID}.cloudfunctions.net/{FUNCTION_NAME}?abc=1234&stu=abcd

request.argsで受け取った値は to_dictメソッドで辞書に変換しておくと何かと便利なのでオススメです。

def main(request):
  data = request.args.to_dict()
  abc = data.get('abc')
  stu = data.get('stu')
  return f"abc: {abc}, stu: {stu}"

POST メソッド

HTTP POST で送られてきたデータ(リクエストボディ)は、リクエストヘッダのContent-Typeの値に応じてFlaskのインスタンスや関数を使い分けます。

application/json

https://{REGION}-{PROJECT_ID}.cloudfunctions.net/{FUNCTION_NAME}
{
  "abc": "1234",
  "stu": "abcd"
}

request.get_jsonで受け取った値は、最初から辞書になっています。

def main(request):
  data = request.get_json() # <class 'dict'>
  abc = data.get('abc') # 1234
  stu = data.get('stu') # abcd
  return f"abc: {abc}, stu: {stu}"

application/x-www-form-urlencoded

https://{REGION}-{PROJECT_ID}.cloudfunctions.net/{FUNCTION_NAME}
{
  "abc": 1234,
  "stu": "abcd"
}

GET と同様に、request.formで受け取った値はto_dictメソッドで辞書に変換しておくと便利です。

def main(request):
  data = request.form.to_dict() # <class 'dict'>
  abc = data.get('abc') # 1234
  stu = data.get('stu') # abcd
  return f"abc: {abc}, stu: {stu}"

その他の application/**

リクエストヘッダのContent-Typeapplication/jsonapplication/x-www-form-urlencoded以外の場合、request.get_dataを使用してリクエストパラメータを受け取ります。

https://{REGION}-{PROJECT_ID}.cloudfunctions.net/{FUNCTION_NAME}
{
  "abc": "1234",
  "stu": "abcd"
}

GET と同様に、request.get_dataで受け取った値は辞書に変換しておくと便利です。ただし、この値は JSON エンコードされているので、辞書形式にjson.loadsでデコードする必要があります。

import json

def main(request):
  data = json.loads(request.get_data()) # <class 'dict'>
  abc = data.get('abc') # 1234
  stu = data.get('stu') # abcd
  return f"abc: {abc}, stu: {stu}"

リクエスト内容がわからないとき

使用する Web API によっては、 サーバに送られる情報がドキュメントに書かれていない不親切なケースもあるので、そのときの対応策を紹介します。

その方法とは、Cloud Functions でリクエストパラメータを受け取るために必要な リクエストメソッド ( GET か POST か)や リクエストヘッダ ( Content-Type )が特定できればいいので、それらを調べるコードを書くことです。

def main(request):
  method = request.method
  content_type = request.content_type
  return f"method: {method}, content_type: {content_type}"

レスポンスの内容が

参考

この記事が気に入ったら
フォローしてね!

シェアしていただけると励みになります
  • URLをコピーしました!

コメント

コメントする

目次
閉じる