练习 - 删除标头信息

已完成

发布 Web API 的公司通常需要谨慎控制其 API 返回的 HTTP 标头,最好不要重写 API 源代码。

政府决定通过 RESTful API 与其下属机构共享人口普查数据。 关键要求是安全共享数据,并可以轻松进行修改,以便快速集成。 你作为首席开发者,需要创建 API 网关。 你使用网关发布可使用新式安全标准公开 OpenAPI 终结点的 RESTful 人口普查 API。

此处你将:

  • 发布 RESTful 人口普查 API。
  • 部署 API 管理网关。
  • 通过网关终结点公开人口普查 API。
  • 从响应中移除标头。

重要

需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户

部署人口普查 Web API

你已开发了用于返回敏感的人口普查信息的 .NET Core 应用。 该应用包括用于生成 OpenAPI 文档的 Swashbuckle。

为了节约时间,先运行在 Azure 中托管 RESTful API 的脚本。 此脚本执行以下步骤:

  • 它在免费层创建 Azure 应用服务计划。
  • 它在 Azure 应用服务中创建 Web API,从本地存储库针对 Git 部署进行配置。
  • 它为应用设置帐户级别部署凭据。
  • 它在本地配置 Git。
  • 它将 Web API 部署到应用服务实例。
  1. 登录 Azure 门户

  2. 在 Azure 任务栏中,选择 Cloud Shell 图标以打开 Azure Cloud Shell。

    Screenshot of Cloud Shell icon in taskbar.

  3. 要克隆包含应用源代码的存储库,请在 Cloud Shell 中运行以下 git clone 命令:

    git clone https://github.com/MicrosoftDocs/mslearn-protect-apis-on-api-management.git
    
  4. 若要本地导航到存储库文件夹,请运行以下命令:

    cd mslearn-protect-apis-on-api-management
    
  5. 从名称可以看出,setup.sh 是创建测试 API 时将运行的脚本。 此脚本生成公开 OpenAPI 接口的公共 Web 应用:

    bash setup.sh
    

    运行脚本大约需要一分钟时间。 脚本结束运行时,它将显示两个可用于测试应用部署的 URL。 注意,部署期间应用运行所需的所有依赖项都会在远程应用服务上自动安装。

  6. 若要测试应用是否正确部署,请将 Cloud Shell 输出中的第一个 URL 复制并粘贴到浏览器。 浏览器应显示应用的 Swagger UI,并声明以下 RESTful 终结点:

    • api/census,返回人口普查数据和相关人员信息
    • api/census/{censusYear},返回指定年份的人口普查数据和相关人员信息
    • api/people/{reference},返回有关特定人员的详细信息

    Screenshot of the Swagger page for the API, showing the RESTful endpoints.

  7. 最后,从 Cloud Shell 输出中复制最后一个 URL。 此 URL 是 Swagger JSON URL,在本练习的后续部分需要该 URL。

部署 API 网关

本练习的下一步是在 Azure 门户中创建 API 网关。 在下一个部分中,将使用此网关来发布 API:

  1. 登录到 Azure 门户

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

  3. 在左侧菜单窗格中,选择“集成”,然后在“搜索服务和市场”搜索框中输入“API 管理”。 在结果中选择“API 管理”卡,然后选择“创建”以打开“创建 API 管理服务”窗格。

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

    设置
    项目详细信息
    订阅 选择订阅
    资源组 选择新的或现有的资源组。 资源组是用于保存 Azure 解决方案相关资源的逻辑容器。
    实例详细信息
    区域 选择可用区域。
    资源名称 输入 apim-CensusData<random number>,将 random number 替换为你自己的一串数字,以确保名称是全局唯一的。
    组织名称 输入 Government-Census。 要在开发人员门户和电子邮件通知中使用的组织名称。 (开发人员门户和通知并非在所有服务层中都可用。)
    管理员电子邮件 用于接收所有系统通知的电子邮件地址。
    定价层
    定价层 从下拉列表中选择 Consumption (99.95% SLA)

    Screenshot of the completed settings on the Basics tab of the Create API Management service screen.

    注意

    消耗层提供用于测试的快速部署,并具有即用即付的定价模型。 整体 API 管理体验与其他定价层类似。

  5. 选择“查看 + 创建”。 通过验证后,选择“创建”。 部署可能需要几分钟的时间。 部署完成后,你将看到 API 管理实例在 Azure 资源中列出。 选择“转到资源”以查看 API 管理服务的窗格。

导入 API

现在,将人口普查 API 导入 API 管理网关:

  1. 在 API 管理实例的左侧菜单窗格中,在“API”下,选择“API”,然后选择“+ 添加 API”。

  2. 在“从定义创建”下,选择“OpenAPI”。 此时将显示“基于 OpenAPI 规范创建”对话框。

  3. 在“OpenAPI 规范”字段中,粘贴之前在本练习中保存的 Swagger JSON URL。

    Screenshot of the Create from OpenAPI specification dialog box with the swagger JSON URL entered.

    注意

    可以看到在退出该框时,其中会填充一些其他字段。 这是因为你使用的 OpenAPI 可指定大部分的所需连接详细信息。

  4. 将其他设置保留默认值,然后选择“创建”。

测试 API

让我们看看默认从 API 返回的数据:

  1. Azure 门户菜单或“主页”上,选择“所有资源”,然后选择 API 管理实例。

  2. 在左侧菜单窗格的“API”下,选择“API”,然后在中间窗格中,选择“人口普查数据”。

  3. 在顶部菜单栏中,选择“测试”选项卡,然后选择“GetLatestCensus”操作。

  4. 选择Send

    Screenshot of the test results for the GetLatestCensus operation, showing the default Response content.

  5. 请注意,响应中会显示 x-powered-by,并显示框架为 ASP.NET。

删除标头

现在,我们将添加一个策略,以便从 API 发送的响应中删除 x-powered-by 标头:

  1. 再次选择“人口普查数据”,然后在顶部菜单栏中,选择“设计”选项卡。

  2. 选择“所有操作”,然后在“出站处理”部分,选择 </> 图标。 此时将显示策略 XML 编辑器。

    Screenshot of the Design tab with the Policies icon highlighted in the Outbound processing section.

  3. 将默认 <outbound> 标记替换为以下代码:

    <outbound>
       <set-header name="x-powered-by" exists-action="delete" />
       <base />
    </outbound>
    
  4. 选择“保存”。

测试将标头删除

现在应该能够运行测试来展示标头已删除:

  1. 再次选择“人口普查数据”,然后在顶部菜单栏中,选择“测试”选项卡。

  2. 选择“GetLatestCensus”操作,然后选择“发送”。

    Screenshot of the test results for the GetLatestCensus operation, showing the headers removed in the Response.

  3. HTTP 响应中应无 x-powered-by 标头。