练习 - 向现有 API 添加另一个 Azure Functions 应用

已完成

回忆一下,你想将所有单独微服务 (Azure Functions) 集成到单个 API。 你已将 Products 函数应用添加到 API 管理的新实例。 现在,你想要向该 API 添加另一个函数应用。

在本练习中,你会向 API 添加 Orders 函数应用,并使用 curl 工具测试集成系统。

测试 OrderDetails 函数

在将 Orders 函数应用添加到 API 之前,让我们测试它所托管的函数 - OrderDetails。

  1. 在 Azure 资源菜单上或从“主页”上,选择“所有资源”。 此时将显示“所有资源”窗格。

  2. 按类型对资源进行排序,然后选择名称以 OrderFunction 开头的函数应用。 此时显示 OrderFunction 函数应用的“概述”窗格。

  3. 从函数应用的函数列表中,选择“OrderDetails”。 此时显示“OrderDetails”函数概述窗格。

  4. 在“订单详细信息”菜单的“开发人员”下,选择“代码 + 测试”。 此时将显示 OrderDetails 函数的“代码 + 测试”窗格,其中显示了 function.json 文件的内容。

    OrderDetails JSON code, with Code + Test in menu and Test/Run in command bar highlighted.

  5. 在命令栏上,选择“测试/运行”。 此时显示 OrderDetails 函数的“输入”参数选项卡。

  6. 在“HTTP 方法”字段中,从下拉列表中选择“GET”,然后在“查询”下选择“添加参数”,在“名称”字段中输入名称,在“值”字段中输入“Chiba”(值区分大小写),然后选择“运行”。

  7. 日志控制台将打开并显示请求的状态。 “输出”选项卡以 JSON 格式显示 HTTP 响应代码和内容。

    Add a new function option page appears.

    (可选)可以使用名称值“Henri”和“Barriclough”运行其他请求,以获取不同的客户订单。

  8. 选择“关闭”以关闭“测试/运行”的“输入”“输出”选项卡。

  9. 在“OrderDetails”窗格的命令栏上,选择“获取函数 URL”。 请注意,该 URL 是 azurewebsites.net 域中函数的名称。

将函数添加到现有 API

在此步骤中,我们会将 Order 函数添加到在上一练习中创建的 API 管理资源。 在本练习中,我们使用了函数应用界面中的 API 管理接口。 在这里,我们会通过 Azure 门户资源菜单导航到 API 管理实例,目的是演示这两种方法均可用。

  1. 在 Azure 资源菜单上或从主页上,选择“所有资源”。 此时将显示“所有资源”窗格。

  2. 按类型对资源进行排序,然后选择 OnlineStore API Management 服务。 此时会显示 OnlineStore 的“API Management 服务”窗格。

  3. 在菜单中的“API”下,选择“API”。 “API”窗格显示用于定义新 API 的选项。

  4. 在“从 Azure 资源创建”下,选择“函数应用”。

    Screenshot of the Add a New API screen with a callout highlighting the Azure Function App option.

    此时将显示“从函数应用创建”对话框。

  5. 若要选择函数应用,请选择“浏览”。 此时将显示“导入 Azure Functions”窗格。

  6. 在“配置所需设置”字段中,选择“选择”。

    Screenshot of the Import Azure Functions dialog box with Configure required settings field and Select button highlighted.(../media/5-import-azure-function-app-03-expanded.png#lightbox)

    此时会显示“选择 Azure 函数应用”窗格。

  7. 选择“OrderFunctionNNNNNNN”,然后选择“选择”。 “导入 Azure Functions”窗格重新显示,其中 OrderDetails 函数应用已配置。

  8. 确保选中“OrderDetails”,然后在页面底部选择“选择”以添加函数。 此时将显示“从函数应用创建”对话框。

  9. 将“API URL 后缀”字段中的值替换为“orders”。 请注意此更改如何更新基础 URL。 选择“创建”以创建 API。

    Screenshot of the Create from Function App dialog populated with details of the Orders function.

    OnlineStore API Management 服务显示“设计”选项卡,以及 OrderDetails 的所有适用(GET、POST)API。

在门户中测试 OnlineStore 订单终结点

现在,我们已将 OrderDetails 添加到 API,接下来使用 Azure 门户中的 API 管理工具进行测试。

  1. 在“OrderFunctionNNNNNN API 设计”选项卡上的“所有操作”下,选择“GET OrderDetails”,然后选择“测试”选项卡。

  2. 在“查询参数”部分中,选择“添加参数”,在“NAME”字段中输入名称,在“VALUE”字段中输入“Chiba”。 选择Send

  3. “HTTP 响应消息”选项卡显示 HTTP 请求成功 (HTTP/1.1/ 200 OK),以及一个显示订单 ID、客户名称、订单总价和发货状态的 JSON 对象。

  4. 向上滚动到“HTTP 请求”部分;请注意,请求已发送到子域和 azure-api.net 域的子目录。 此位置不同于 azurewebsites.net 主机域。

测试组合的 API

我们可以使用 curl 命令行工具将请求提交给我们的 API。 cURL 是理想之选,因为我们在请求中包含正确的订阅密钥。 请求还需要 Azure API 管理中托管的 API 位置,并且在此例中包含 Products 和 Orders 函数。

  1. 在 Azure 资源菜单中或从主页,选择“所有资源”。

  2. 按类型对资源进行排序,然后选择 OnlineStore API Management 服务。 此时会显示 OnlineStore 的“API Management 服务”窗格。

  3. 在“Essentials”部分中,将鼠标悬停在“网关 URL”上,然后选择“复制到剪贴板”图标。

  4. 在右侧的 Azure Cloud Shell 中定义一些变量。 运行以下命令,将 <paste URL here> 占位符替换为复制到剪贴板的 URL 值,然后按 Enter。 此值定义网关变量。

    GATEWAY_URL=<paste URL here>
    
  5. 在 Azure 中的 OnlineStore API 管理服务菜单中,向下滚动到“API”,然后选择“订阅”。 此时将显示 OnlineStore API Management 实例的“订阅”窗格。

  6. 对于“内置所有访问权限订阅”,选择该行最右侧的省略号 (…),然后从上下文菜单中选择“显示/隐藏密钥”。 此时显示 API 的主密钥和辅助密钥。

  7. 在“主密钥”字段中,选择“复制到剪贴板”图标。

  8. 在 Cloud Shell 中,运行以下命令,将占位符替换为剪贴板中的值,然后按 Enter 键。

    SUB_KEY=<paste key here>
    
  9. 现在,通过查询同一个 API Management 服务,我们可以请求订单和产品的详细信息:

    1. 若要请求客户名称 Henri 的详细信息,请在 Cloud Shell 中运行以下命令:

       curl -X GET "$GATEWAY_URL/orders/OrderDetails?name=Henri" -H "Ocp-Apim-Subscription-Key:$SUB_KEY"
      

      响应包含 JSON 代码块,其中包含订单详细信息,显示订单 56224 已发往 Pascale Henri。 你还可以尝试针对姓名 Chiba 和 Barriclough 执行此命令,以获得不同的结果。

    2. 若要请求 id 为 2 的产品的详细信息,请在 Cloud Shell 中运行以下命令:

       curl -X GET "$GATEWAY_URL/products/ProductDetails?id=2" -H "Ocp-Apim-Subscription-Key:$SUB_KEY"
      

      响应包含具有产品详细信息的 JSON 代码块。 你还可以尝试采用 id 值 1 和 3 来运行该命令,以查看不同的结果。

请注意,(根据 GATEWAY_URL 的定义)这两个函数现在可以通过 azure-api.net 域中的终结点调用,此域是 Azure API 管理使用的域。 在其他学习模块中,你可以了解如何在 API 管理网关中将策略、安全设置、外部缓存和其他功能应用到这些函数。 网关为你提供了一个中心控制点,你可以在其中管理多个微服务,而无需更改其代码。