练习 - 探索输入和输出绑定类型

已完成

在本练习中,我们会创建一个函数,使其在收到 HTTP 请求时运行,并通过返回一条消息来响应每个请求。

请查看下面的简要图,了解我们将生成什么。

Screenshot of Code and Test pane showing default code for HTTP trigger function template.

req 参数是触发器绑定,res 参数是输出绑定。 它可能有助于将这些参数看作“请求”和“响应”的缩写。

Screenshot of Code and Test pane showing default code for HTTP trigger function template.

Request 参数是触发器绑定,Response 参数是输出绑定。

创建函数应用

现在来创建一个可在此整个模块中使用的函数应用。 函数应用可将函数分组为一个逻辑单元,以便更轻松地管理、部署和共享资源。

  1. 使用激活沙盒时所用的帐户登录 Azure 门户

  2. 在资源菜单上或在“主页”中,选择“创建资源”。 此时会显示“创建资源”窗格。

  3. 在“创建资源”菜单中,选择“计算”,然后在结果列表中,选择“函数应用”。 可能需要在“搜索服务和市场”窗口中搜索“函数应用”。

  4. 选择“创建”。此时将显示“创建函数应用”窗格。

  5. 在“基本信息”选项卡上,为每个设置输入以下值。

    设置 说明
    项目详细信息
    订阅 Concierge 订阅 要用于本练习的 Azure 订阅。
    资源组 从下拉列表中,选择 [沙盒资源组名称] 沙盒的资源组。
    实例详细信息
    Function App 名称 输入“全局唯一名称” 此名称用于标识新函数应用。 有效字符为 a-z0-9-
    是否要部署代码或容器映像? 代码 用于发布代码文件或 Docker 容器的选项。
    运行时堆栈 从下拉列表中选择“Node.js” 此模块中的示例代码是使用 JavaScript 编写的。
    版本 接受默认值 默认值对于此练习来说已足够。
    区域 从下拉列表中选择一个位置 选择离你最近的区域。
  6. 对于所有其他选项,接受默认值。 选择“查看 + 创建”以验证设置,然后选择“创建”来预配和部署函数应用。

  7. 部署可能需要一段时间。 在帐户名称旁边的全局控件中,选择“通知”图标,等到出现“部署成功”消息。

  8. 函数部署完成后,选择“转到资源”。 此时将显示函数应用的“概览”窗格。

  1. 使用激活沙盒时所用的同一帐户登录到 Azure 门户

  2. 在资源菜单上或在“主页”中,选择“创建资源”。 此时会显示“创建资源”窗格。

  3. 在“创建资源”菜单中,选择“计算”,然后搜索并选择“函数应用”。 可能需要在“搜索服务和市场”窗口中搜索“函数应用”。

  4. 选择“创建”。此时将显示“创建函数应用”窗格。

  5. 在“基本信息”选项卡上,为每个设置输入以下值。

    设置 说明
    项目详细信息
    订阅 Concierge 订阅 要用于本练习的 Azure 订阅。
    资源组 从下拉列表中,选择 [沙盒资源组名称] 沙盒的资源组。
    实例详细信息
    Function App 名称 输入“全局唯一名称” 此名称用于标识新函数应用。 有效字符为 a-z0-9-
    是否要部署代码或容器映像? 代码 用于发布代码文件或 Docker 容器的选项。
    运行时堆栈 从下拉列表中选择“PowerShell Core” 此模块中的示例代码是使用 PowerShell 编写的。
    版本 接受默认值 默认值对于此练习来说已足够。
    区域 从下拉列表中选择一个位置 选择离你最近的区域。
  6. 对于所有其他选项,接受默认值。 选择“查看 + 创建”以验证输入,然后选择“创建”来预配和部署函数应用。

  7. 部署可能需要一段时间。 在帐户名称旁边的全局控件中,选择“通知”图标,等到出现“部署成功”消息。

  8. 函数部署完成后,选择“转到资源”。 此时将显示函数应用的“概览”窗格。

提示

如果在 Azure 门户中查找函数应用时遇到困难,请了解如何将函数应用添加到 Azure 门户中的收藏夹

创建函数

我们已创建了一个函数应用,现在可以创建函数了。 每个函数都通过触发器激活。 在本模块中,我们会使用预定义模板定义 HTTP 触发器。

  1. 在“概述”页上的“函数”选项卡中,选择“在 Azure 门户创建”按钮。

  2. 此时将显示“创建函数”窗格。

    Screenshot for the Create Function pane.

  3. 在“选择模板”部分中,选择“HTTP 触发器”模板。

  4. 在“模板详细信息”部分,确认以下设置。

    • 在“新建函数”文本框中,接受默认名称“HttpTrigger1”。 Azure 会自动为创建的函数创建唯一名称。 可以选择其他名称,但请使用有意义的名称。

    • 在“授权级别”文本框中,接受默认值“函数”。 授权级别确定请求中需要提供哪些密钥才能运行。 “函数”授权级别需要特定于函数的密钥,创建该密钥后即会显示该密钥

  5. 选择创建。 触发器函数传播到函数应用时,函数应用的“函数”窗格随即出现,其中列出了“HttpTrigger1”。

  6. 在命令栏中,选择“获取函数 URL”。 此时将显示“获取函数 URL”对话框。

  7. 从下拉列表中选择“默认(函数密钥)”,然后选择 URL 末尾的“复制到剪贴板”图标,再选择“确定”以关闭对话框。

  8. 在新的浏览器标签页的地址栏中,粘贴复制的函数 URL。 按 Enter 以在浏览器中运行请求。 函数应用初始化时,响应可能需要几分钟才能完成。 如果收到超时错误,请刷新以重新发送请求。

    当函数做出响应时,应会在浏览器中看到类似于以下示例的输出。

    This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
    
  9. 将以下查询字符串 &name=Joe 添加到 URL 的末尾。 生成的 URL 应与下面的示例类似:

    https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe

  10. Enter 以在浏览器中运行请求。 当函数做出响应时,应会在浏览器中看到类似于以下示例的输出。

    Hello, Joe. This HTTP triggered function executed successfully.
    

    正如你目前从本练习中看到的那样,在创建函数时必须定义触发器。 每个函数都有一个触发器。 在本例中,我们使用的是一个 HTTP 触发器,这意味着我们的函数在收到 HTTP 请求时启动。 模板中的默认实现(如以下屏幕截图内的 JavaScript 中所示)返回查询字符串或请求正文中的参数 name 的值。 如果未提供任何查询字符串,该函数将响应一条消息,要求调用者提供一个名称值。

    Illustration of default HTTP trigger, showing HTTP request and response binding parameters.

  11. 在 Azure 门户的“函数”菜单中,选择“编码 + 测试”。

    此时将显示函数的“代码 + 测试”窗格,并显示 index.js 文件的内容。 函数的默认 JavaScript 代码应类似于以下示例。

    module.exports = async function (context, req) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        const name = (req.query.name || (req.body && req.body.name));
        const responseMessage = name
            ? "Hello, " + name + ". This HTTP triggered function executed successfully."
            : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: responseMessage
        };
    }
    
  12. 让我们简单地了解一下函数的另一个文件,即 function.json 配置文件。 通过从代码块上方文件路径的下拉列表中选择“function.json”来访问此文件。 此配置数据显示在以下 JSON 列表中。

    {
        "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
            "get",
            "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
      ]
    }
    

    此函数有一个 httpTrigger 类型的名为“req”的触发器绑定和一个 http 类型的名为“res”的输出绑定。

在我们函数的上述代码中,我们已看到了如何通过“req”参数访问传入的 HTTP 请求的有效负载。 而且,我们通过设置“res”参数发送了一个 HTTP 响应。 绑定确实为我们处理了一些繁重的工作!

我们已创建了一个函数应用,现在可以创建函数了。 每个函数都通过触发器激活。 在本模块中,我们会使用模板创建 HTTP 触发器。

  1. 在“概述”页上的“函数”选项卡中,选择“在 Azure 门户创建”按钮。

  2. 此时将显示“创建函数”窗格。

  3. 在“选择模板”部分中,选择“HTTP 触发器”模板。

  4. 在“模板详细信息”部分,确认以下设置。

    • 在“新建函数”文本框中,接受默认名称“HttpTrigger1”。 创建函数时,Azure 会自动提供唯一名称。 可以选择其他名称,但请使用有意义的名称。

    • 在“授权级别”文本框中,接受默认值“函数”。 授权级别确定请求中需要提供哪些密钥才能运行。 函数需要特定于函数的密钥。

      Screenshot for the Add Function pane.

  5. 选择创建。 此时将显示函数的“HttpTrigger1”窗格。

  6. 在命令栏中,选择“获取函数 URL”。 此时将显示“获取函数 URL”对话框。

  7. 从下拉列表中选择“默认(函数密钥)”,然后选择 URL 末尾的“复制到剪贴板”图标,再选择“确定”以关闭对话框。

  8. 在新的浏览器标签页的地址栏中,粘贴复制的函数 URL。 按 Enter 以在浏览器中运行请求。 函数应用初始化时,响应可能需要几分钟才能完成。 如果收到超时错误,请刷新以重新发送请求。

    当函数做出响应时,应会在浏览器中看到类似于以下示例的输出。

    This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
    
  9. 将查询字符串 &name=Joe 添加到 URL 的末尾。 生成的 URL 应与下面的示例类似:

    https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe

  10. Enter 以在浏览器中运行请求。 当函数做出响应时,应会在浏览器中看到类似于以下示例的输出。

    Hello, Joe. This HTTP triggered function executed successfully.
    

    正如你目前从本练习中看到的那样,在创建函数时必须定义触发器。 每个函数都有一个触发器。 在本例中,我们使用的是一个 HTTP 触发器,这意味着我们的函数在收到 HTTP 请求时启动。 模板中的默认实现(参见以下屏幕截图中的 PowerShell)使用 Push-OutputBinding cmdlet 以查询字符串或请求正文中的参数 name 的值进行响应。 如果未提供任何字符串,该函数将响应一条消息,提示调用者提供一个名称值。

    Code and Test pane for HTTP request showing response and respective binding parameters.

  11. 在“函数”菜单中,选择“代码 + 测试”。 此时将显示函数的“代码 + 测试”窗格,并显示 run.ps1 文件的内容。

    函数的默认 PowerShell 代码应类似于以下示例。

    using namespace System.Net
    
    # Input bindings are passed in via param block.
    param($Request, $TriggerMetadata)
    
    # Write to the Azure Functions log stream.
    Write-Host "PowerShell HTTP trigger function processed a request."
    
    # Interact with query parameters or the body of the request.
    $name = $Request.Query.Name
    if (-not $name) {
        $name = $Request.Body.Name
    }
    
    $body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
    
    if ($name) {
        $body = "Hello, $name. This HTTP triggered function executed successfully."
    }
    
    # Associate values to output bindings by calling 'Push-OutputBinding'.
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body = $body
    })
    
  12. 让我们简单了解一下该函数的另一个文件:function.json 配置文件。 通过从文件路径下拉列表中选择“function.json”来打开此文件。 此配置数据显示在以下 JSON 列表中。

    {
      "bindings": [
        {
          "authLevel": "function",
          "type": "httpTrigger",
          "direction": "in",
          "name": "Request",
          "methods": [
            "get",
            "post"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "Response"
        }
      ]
    }
    

    如你所见,此函数有一个 httpTrigger 类型的触发器绑定(名为 Request)和一个 http 类型的输出绑定(名为 Response)。 在我们函数的上述代码中,我们了解了如何通过 Request 参数访问传入的 HTTP 请求的有效负载。 而且,我们通过设置 Response 参数简单发送了一个 HTTP 响应。 绑定确实能够为我们处理一些繁重的工作。

了解绑定类型

  1. 在“函数”菜单中,选择“集成”。 此时,函数的“集成”窗格显示。

    请注意,我们已定义了一个触发器和一个输出绑定,如下图所示。 集成视图针对屏幕的宽度和高度调整到最合适的尺寸。 如果屏幕足够宽,则相同的信息可水平显示。

    Screenshot of vertical flow diagram showing Trigger and Inputs leading to Function and Function leading to Outputs.

    可以看到,我们无法添加多个触发器。 若要更改函数的触发器,需要删除该触发器并创建一个新触发器。 但是,“输入”和“输出”部分使你可以添加多个绑定,以便请求可以接受多个输入值,并返回多个输出值。

  2. 在“输入”框中,选择“添加输入”。 此时,“创建输入”窗格显示。 选择“绑定类型”的下拉列表,以查看所有可能的输入绑定类型的列表。

    Screenshot of the Add input options.

    请花点时间来考虑如何在解决方案中使用其中的每一个输入绑定。

    在本模块的后面部分,会添加输入绑定,现在选择“取消”以消除此窗格。

  3. 在“输出”框中,选择“添加输出”。 此时,“创建输出”窗格显示。 选择“绑定类型”的下拉列表,以查看所有可能的输出绑定类型的列表。

    Screenshot of the Add output options.

    正如你所看到的,你可以使用若干输出绑定类型。 在本模块的后面部分,会添加输出绑定,现在选择“取消”以消除此窗格。

  1. 在“函数”菜单中,选择“集成”。 此时,函数的“集成”窗格显示。

    请注意,我们已定义了一个触发器和一个输出绑定,如下图所示。 集成视图针对屏幕的宽度和高度调整到最合适的尺寸。 如果屏幕不够宽,则相同的信息可垂直显示。

    Screenshot of horizontal flow diagram showing Trigger and Inputs leading to Function and Function leading to Outputs.

    可以看到,我们无法添加多个触发器。 若要更改函数的触发器,需要删除该触发器并创建一个新触发器。 但是,“输入”和“输出”部分使你可以添加多个绑定,以便函数可以接受多个输入值,并返回多个输出值。

  2. 在“输入”框中,选择“添加输入”。 此时,“创建输入”窗格显示。 选择“绑定类型”的下拉列表,以查看所有可能的输入绑定类型的列表。

    Screenshot of the Add input options.

    请花点时间来考虑如何在解决方案中使用其中的每一个输入绑定。 有多个可选项可供选择。

    在本模块的后面部分,会添加输入绑定,现在选择“取消”以消除此窗格。

  3. 在“输出”框中,选择“添加输出”。 此时,“创建输出”窗格显示。 选择“绑定类型”的下拉列表,以查看所有可能的输出绑定类型的列表。

    Screenshot of the Add output options.

    正如你所看到的,你可以使用若干输出绑定类型。 在本模块的后面部分,会添加输出绑定,现在选择“取消”以消除此窗格。

至此,我们已经学习了如何创建函数应用并向其添加函数。 我们查看了一个操作中的简单函数,该函数会在收到 HTTP 请求时运行。 我们还研究了 Azure 门户,以及函数可以使用的输入绑定和输出绑定类型。 在下一个单元中,我们将使用一个输入绑定从数据库读取文本。