Azure基本

Azure App ServiceからAzure FunctionsにPost送信してみた(ソースコード編)

今回も引き続き、Azure App ServiceからPost通信によってAzure Functionsを呼び出す処理の実装について述べる。ここでは、具体的なサンプルプログラムのソースコードを共有する。

前提条件

下記記事を参照のこと。

Azure App ServiceからAzure FunctionsにPost送信してみた(前提条件と実行結果)Azure App ServiceからAzure Functionsを呼び出す際、Get通信だけでなく、リクエストパラメータを含むPos...

作成したサンプルプログラム(App Service側)の内容

作成したサンプルプログラム(App Service側)の構成は以下の通り。
サンプルプログラムの構成_appservice
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

コントローラクラスの内容は以下の通りで、searchメソッド内でAzure FunctionsのgetUserDataList関数を呼び出すようにしている。

また、Azure FunctionsのgetUserDataList関数の戻り値となるクラスと、そのクラスで参照するUserDataクラスの内容は以下の通り。

さらに、検索用のFormクラスの内容は以下の通り。

また、DemoConfigBeanクラスの内容は以下の通りで、ObjectMapperオブジェクトを作成するメソッドを追加している。

さらに、pom.xmlの内容は以下の通りで、Lombokの設定を追加している。

また、HTMLファイルの内容は以下の通りで、検索一覧画面の内容となっている。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/call-azure-functions-by-post-2/demoAzureApp



作成したサンプルプログラム(Azure Functions側)の内容

作成したサンプルプログラム(Azure Functions側)の構成は以下の通り。
サンプルプログラムの構成_AzureFunctions
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

<2021年4月13日 追記>
spring-cloud-function-dependenciesのバージョンは、2021年3月16日にリリースしたバージョン3.1.2を利用すると、1つのAzure Functions内に複数のファンクションを含む場合の不具合が解消できている。


その場合、Handlerクラスの継承するクラスを「AzureSpringBootRequestHandler」クラスから「FunctionInvoker」クラスに変更する。


spring-cloud-function-dependenciesの3.1.2を利用した実装サンプルは、以下の記事を参照のこと。

spring-cloud-function-dependenciesのバージョンを最新(3.1.2)にしてみたこれまでこのブログで取り上げてきたAzure Functionsのサンプルプログラムでは、spring-cloud-function-d...

ハンドラークラスの内容は以下の通りで、Azure App Serviceのコントローラクラスから呼ばれるgetUserDataList関数である。

また、Azure Functionsのメインクラスは以下の通りで、先ほどのハンドラークラスのhandleRequestメソッドで呼び出される。

さらに、Azure FunctionsのメインクラスのgetUserDataListメソッドの引数・戻り値は以下のクラスで定義している。

また、検索サービスクラスの内容は以下の通りで、UserDataMapperクラスのデータベース検索処理を呼び出している。

さらに、USER_DATAテーブルからデータ検索するクラス、XMLファイルの内容は以下の通り。

また、メインクラス(DemoAzureFunction.java)の名前が変更になった影響で、以下の定義ファイルの内容を変更している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/call-azure-functions-by-post-2/demoAzureFunc

要点まとめ

  • Azure App ServiceからPost通信によってAzure Functionsを呼び出す際も、Get通信の場合と同様、RestTemplateクラスを利用すればよい。
  • Post通信でリクエストボディに受け渡すパラメータを設定するには、LinkedMultiValueMapクラスのMapオブジェクトにパラメータを設定後、それをHttpEntityオブジェクトに追加する。