タイトルの通り、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
によって設定することができます。
{
"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.json
に Route
プロパティは設定されていません。プロパティが存在しない場合は、関数名のパスが含まれている URL へリクエストが行われた場合に関数が実行されます。( HTTPTrigger
のみ ) 関数のパスをカスタマイズするためには、この function.json
内の bindings.Route
設定を正しく行う必要があります。
上記のサンプルの function.json
の場合、Route
プロパティが "users/{id:alpha?}"
となっています。{id:alpha?}
でパスの制限をかけています。alpha
は 大文字または小文字の英字のみ指定可能です。その他、bool
や float
、int
などを設定することが可能です。また、制限の後に ?
を追加することで、id
がオプション (指定なしでも動作可) であることを示します。このオプション ?
が抜けている場合、常に id
がリクエストURI に含まれていないと関数が実行されないので注意が必要です。パスの制限に関しては、公式ドキュメント に詳細が記載されているので、ご確認ください。
という訳で、Azure Functions の Route
設定を正しく行うことで、RESTful API の実装が簡単にできることが分かりました。