LoginSignup
1
0

More than 1 year has passed since last update.

【 Azure Functions 】リクエスト URI (Path) に含まれる任意の値を関数内で処理する方法

Posted at

タイトルの通り、Azure Functions の関数リクエスト時の URI (path) に含まれる任意の値を関数内で処理する方法について、調査した内容をまとめています。

実現したい内容

以下、5種類のリクエストを同一関数で処理する RESTful API を実装したい。

HTTP リクエストメソッド Path 処理内容
GET /users ユーザー一覧を取得
POST /users ユーザーの新規作成
GET /users/{id} id で指定されたユーザー情報を取得
PATCH /users/{id} id で指定されたユーザー情報を更新
DELETE /users/{id} id で指定されたユーザー情報を削除

実装方法

前段で紹介したリクエスト URI の Path は、id が含まれているものと含まれていないものが存在します。Azure Functions の Route は各関数のルートディレクトリ配下の function.json によって設定することができます。

function.json
{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post",
        "patch",
        "delete"
      ],
      "Route": "users/{id:alpha?}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "scriptFile": "../dist/users/index.js"
}

Azure Functions Core Tools を使った関数の開発では、標準で function.jsonRoute プロパティは設定されていません。プロパティが存在しない場合は、関数名のパスが含まれている URL へリクエストが行われた場合に関数が実行されます。( HTTPTrigger のみ ) 関数のパスをカスタマイズするためには、この function.json 内の bindings.Route 設定を正しく行う必要があります。

上記のサンプルの function.json の場合、Route プロパティが "users/{id:alpha?}" となっています。{id:alpha?} でパスの制限をかけています。alpha は 大文字または小文字の英字のみ指定可能です。その他、boolfloatint などを設定することが可能です。また、制限の後に ? を追加することで、id がオプション (指定なしでも動作可) であることを示します。このオプション ? が抜けている場合、常に id がリクエストURI に含まれていないと関数が実行されないので注意が必要です。パスの制限に関しては、公式ドキュメント に詳細が記載されているので、ご確認ください。

という訳で、Azure Functions の Route 設定を正しく行うことで、RESTful API の実装が簡単にできることが分かりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0