Azure Funstions はクラウド上にWebサーバを構築せずに単機能の関数(API)を提供するサービスです。
APIを公開する際には、仮想マシンをサーバにする方法もありますが、より手軽な方法としてAzure Functionsがあります。
Azure Functions は自分でWebサーバを構築しないサーバレスアプリケーションの開発で主に使用されます。無料枠内でも十分に利用できるため、非常に便利です。今回はAzure Functions の使い方を検証してみます。
【検証環境】Auzre Functions / .NET 6.0
Azure Functions プロジェクトの作成
まずはVisualStudioでAure Functions プロジェクトを作成します

今回はHttp Trigger を選択します
Http Trigger は一般的なAPI と同様にHTTPリクエストを受け取って処理を行います

デフォルトで作成されたコードを少し修正してみます。本田翼と戸田恵梨香を返却するようにします。
public static class Function1
{
[FunctionName("FunctionTest")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req)
{
System.Collections.Generic.List<Response> response = new()
{
new Response()
{
Name = "本田翼",
Age = 28,
},
new Response()
{
Name = "戸田恵梨香",
Age = 33,
},
};
return new JsonResult(response);
}
}
public class Response
{
public string Name { get; set; }
public int Age { get; set; }
}
この状態で実行すると、コンソールlocalhostのURLが表示されるので、Fiddlerで検証してみます
http://localhost:7264/api/FunctionTest にGETでアクセスすると、レスポンスが正しく返されました

ちなみにPOSTでも同様の結果になります。これはコード内のHttpTriggerの引数に”get” と “post” を指定しているためです。
GETとPOSTで処理を分けたい場合は、下記のように書きます
if (req.Method == "GET")
{
// GET処理
}
else if (req.Method == "POST")
{
// POST処理
}
リクエストパラメータを取得
GETメソッド
クエリパラメータとして、nameに”testname”をいれGETでリクエストを送ります
http://localhost:7264/api/FunctionTest?name=testname
この場合は下記のようにクエリパラメータを取得します
string name = req.Query["name"];
name 変数に “testname”が格納されました

POSTメソッド
下記の様なJSONをリクエストボディに入れてPOSTでリクエストを送ります
{name:"testname",age:22}
POSTの場合にはリクエストボディのパラメータを取得したいわけですが、下記のようなコードで取得します
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
var data = JsonConvert.DeserializeObject<Request>(requestBody);
JSON文字列で受け取り、C#のクラスにデシリアライズできていることが確認できました

その他のリクエスト情報については引数のHttpRequestに含まれているため、適宜利用するようにしましょう
一つのプロジェクトに複数の関数を定義する
Azure Functions は一つのプロジェクト内に複数の関数を定義することができます
新しい項目の追加から、Azure関数を選択します

新しい関数を作成後に実行すると、複数の関数が定義されていることが確認できます(実際にFiddlerで接続もできました)

Azureに発行する
作成した関数をAzure に発行します
Visual Studio の公開から、Azure を選択します

Azure Function App (Window) を選択します

関数アプリの+ボタンからAzureに関数リソースを追加します(ポータルから作成済みの場合は選択)

各項目に任意の設定を行い、Azureへの公開設定を完了させます

しばらくするとAzureに発行が可能になりますので、実際に発行してみます

ポータル上で発行ができていることが確認できました

関数をクリックして、関数のURLの取得からAPIのURLを取得します

実際にアクセスしてみると、作成した関数であることが確認できました!
