yotiky Tech Blog

とあるエンジニアの備忘録

Visual Studio で Azure Functions に HttpTrigger のAPIを作成する

TL;DR

Visual Studio でAzure Functions のAPIを実装します。その後、Visual StudioからAzure App Serviceを新規作成し発行します。 また、PostmanおよびPowershellを使ってローカルでの確認とAzureで動作確認します。 APIはHttpTrigger(GET/POST)で、リクエストとレスポンスにJSONを使います。 開発環境の準備は含まれないため、Visual Studio を使用する Azure Functions の開発 などを参考にしてください。

目次

プロジェクトを作成する

  1. Visual Studioで[ファイル > 新規作成 > プロジェクト]を選択し、[Visual C# > Cloud > Azure Functions]を選択して、任意の場所に設定してOKをクリック。 f:id:yotiky:20180809002055p:plain
  2. Http Trigger を選択してOKをクリック。 f:id:yotiky:20180809002059p:plain
  3. Function1という名前のサンプルが生成される。

Functionを実装する

  1. クラス名とファイル名、FunctionNameを「Echo」に変更。
    public static class Echo
    {
        // Invoke-RestMethod -Uri "http://localhost:7071/api/Echo" -Method Post -ContentType "application/json" -Body '{"message":"Hello Azure Functions" }'
        // Invoke-RestMethod -Uri "https://YourFunctionURL" -Method Post -ContentType "application/json" -Body '{"message":"Hello Azure Functions" }'  
        [FunctionName("Echo")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
  1. リクエストクラスを作成。
class EchoRequest
{
    public string message { get; set; }
}
  1. 変数名をnameからmsgに。
  2. クエリパラメータを取得するところをnameからmessageに修正。
  3. bodyからパラメータを取得するところを修正。
            if (msg == null)
            {
                // Get request body
                var data = await req.Content.ReadAsAsync<EchoRequest>();
                msg = data?.message;
            }
  1. Jsonを扱う名前空間を追加。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
  1. レスポンスを作成する部分を実装する。
    1. IdとしてGuidのハイフンなしを発行。
        var jObject = new JObject();
        jObject["Id"] = Guid.NewGuid().ToString("N");
        jObject["Message"] = msg;

        var res = req.CreateResponse(HttpStatusCode.OK);
        res.Content = new StringContent(jObject.ToString(Formatting.None));

        return res;

ローカルで実行する

  1. F5でデバッグ実行。
  2. Postman で試す方法。
    1. GET
      1. GETを選択、URL欄右のParamsをクリックで展開してパラメータ入力 f:id:yotiky:20180809002102p:plain
    2. POST
      1. POSTを選択、BodyタブでrawとJSON(application/json)を選んでJSONで入力(GETのパラメータが残ってたらチェック外す) f:id:yotiky:20180809002105p:plain
  3. PowerShellで試す方法。
Invoke-RestMethod -Uri "http://localhost:7071/api/Echo" -Method Post -ContentType "application/json" -Body '{"message":"Hello Azure Functions" }'

Azureに発行する

  1. プロジェクト右クリックから発行を押すか、ビルド > [プロジェクト名] を発行する を選択する
  2. 今回は新規作成
    f:id:yotiky:20180809002109p:plain
  3. 必要な情報を入力または選択して作成
    f:id:yotiky:20180809002112p:plain

Azure Functionsの動作確認

  1. Azure Portal で関数のURLを取得する
    f:id:yotiky:20180809002116p:plain f:id:yotiky:20180809002120p:plain
  2. PostmanまたはPowerShellで実行。ローカルで実行するを参照。