【Functions】HTTPトリガーのFunctionsへデータを渡す方法

JavaScript,Windows

こんにちは、しきゆらです。
今回は、タイトル通りHTTPトリガーへリクエスト時にデータを渡し、Functions側で受け取る方法をまとめます。
参考となるドキュメントは以下あたり。

最近以下の本が発売されました。
読んでいる途中ですが、これまでまとめたFunctions以外にもAzureを使った開発についての概要を俯瞰することができます。
Microsoftのドキュメントが読みずらい・・・と思っている方はこちらもぜひ。

データを渡す方法

HTTPリクエストにおけるデータの渡し方としては、よくあるのが以下のパターンかと思います。
他にもパスパラメータというのもありますが、Functionsの場合は処理させたい関数ごとに分かれているはずなので、ここでは扱いません。

  • ヘッダーパラメータ
    • AuthorizationやContent-Typeなど
  • クエリパラメータ
    • リクエストのURLに付与する
  • リクエストボディ
    • JSONなどの文字列

トリガーに対してどのようなデータを渡すのかによって使い分けるのが良いとされていますが
一般的には特定のデータを処理する場合や処理の条件等の小さなデータを渡す場合はクエリパラメータ、
データを新規で作る・更新するなど大きなデータを渡す場合にはリクエストボディを使うようです。

詳しくはこの辺を参照していただければ。

以下でいくつかの方法をサンプルコードを含めて紹介します。
ベースとなるコードはこれまでまとめていた、SharePointへファイルをアップロードするコードです。
詳しくはこちら。

クエリパラメータを取得する

トリガーのrequest引数から取得可能です。

const httpTrigger = (request: HttpRequest, context: InvocationContext) => {
        // 略
        const fileName = `${request.query.get("filename")}.txt`;
        const fileContent = "テキストファイルの中身";
        // 略
}

前回のコードではファイル名をFunctions内で決めていましたが、クエリとしてリクエスト側から指定できるようにする場合はこんな感じにするかと思います。

curlから呼び出すときは、以下のような感じで呼びます。

curl -X POST localhost:7071/api/httpTrigger1?filename=hogehoge

リクエストボディを取得する

リクエストボディもrequest引数から取得可能です。

const httpTrigger = (request: HttpRequest, context: InvocationContext) => {
        // 略
        const fileName = `result_${Date.now()}.txt`;
        const fileContent = JSON.stringify(await request.json());
        // 略
}

以前のコードはrequest.bodyで取得していましたが、JSONを送ると決めてしまえば専用のメソッドから取得が可能です。

curlから呼び出すときは、以下のような感じ。

まとめ

今回は、Functionsに対して外部から処理に対して値を渡す方法をまとめました。
おそらくFunctionsを開発するうえで基本的な情報は網羅できたのではないかと思います。

今回はここまで。

おわり

Posted by しきゆら