第 5 步:添加政策

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

现在,您已更改目标端点,接下来可以将政策添加到代理中。

“政策”是一个 Apigee 组件,您可以通过 API 代理将其附加到消息流中的不同点。政策可以转换消息格式、强制执行访问权限控制、调用远程服务、授权用户、检查消息内容是否存在潜在威胁,以及执行更多其他操作。

在本教程中,您将向代理添加 XMLtoJSON 政策。此政策会将 XML 消息的载荷转换为 JSON。它还会更改响应的 Content-Type 标头。

您可以将政策附加到代理中的。流控制政策的执行方式。在此示例中,您需要将政策添加到名为 PreFlow 的特殊流。PreFlow 中的政策在代理中的任何其他政策之前执行。虽然您无需深入了解流也可阅读此示例,但您可以在使用流控制 API 代理中详细了解流。

添加政策

将 XMLtoJSON 政策添加到代理。

Cloud 控制台中的 Apigee

将 XMLtoJSON 政策添加到代理需要执行两个步骤:

创建政策的实例

如需使用政策,您首先必须通过政策模板创建政策的新实例,如下所示:

  1. 在 Google Cloud 控制台中,前往代理开发 > API 代理页面。

    前往 API 代理

  2. 从代理列表中,选择要添加政策的代理。
  3. 点击开发标签页。

  4. 在左侧窗格中,点击政策文件夹旁边的 + 按钮。
  5. 创建政策对话框中,选择标准政策以按政策类型过滤可用政策列表。
  6. 选择政策类型文本框中,向下滚动到中介,然后选择 XML To JSON

  7. 您可以视需要更改政策的名称显示名。 默认情况下,Apigee 会为政策名称提供一个简短的前缀(在本例中为 X2J-),您可以在该前缀后添加一系列由短划线分隔的描述性字词。请参阅命名规则

    “创建政策”对话框。

    完成后,点击创建以创建该政策。

XML To JSON 政策现在显示在开发视图的右侧窗格中:

“开发”视图中显示的 XML To JSON 政策。

窗格的下半部分显示该政策的 XML 代码。

如需详细了解该政策,请选择政策名称旁边的信息图标 “信息”图标。,然后点击 XML To JSON 政策。系统随即会显示政策的参考页面。

使用 Gemini Code Assist 检查政策说明

如果您拥有 Gemini Code Assist 加购项, 则可以突出显示政策元素,查看有关该元素的信息以及如何使用该元素。如需了解相关信息,请参阅将 Gemini Code Assist 代码解释功能与政策搭配使用

更改政策名称

如需更改政策的名称,请执行以下操作:

  1. 在左侧窗格中的政策下选择政策。
  2. 在政策的 XML 代码的 <DisplayName> 元素中,在政策名称的缩写后添加政策的描述性短语,例如 change-xml-to-json

    将 change-xml-to-json 添加到政策名称。

    这将自动更新政策下显示的政策名称。

    请参阅命名规则

将政策附加到 PreFlow 中的步骤

现在您已创建了 XML To JSON 政策,接下来可以将其附加到 PreFlow 中的步骤:

  1. 在左侧窗格中,依次选择“代理端点”(Proxy Endpoints) > 默认 > PreFlow

    在 Proxy Explorer 中选择的 PreFlow 的目标端点。

    注意:您可能需要展开右侧窗格中的可视化编辑器以查看所有元素。为此,请点击可视化编辑器和文本编辑器之间的分隔线并向下拖动一点。

  2. 点击可视化编辑器右下角PreFlow窗格中 PreFlow 旁边的 + 按钮:

    点击“响应”窗格中 PreFlow 旁边的 + 按钮。

  3. Add policy step(添加政策步骤)对话框中,选择 X2J-change-xml-to-json 政策。
  4. 点击添加以附加该政策。

    X2J-change-xml-to-json 政策现在显示在响应窗格中:

    “响应”窗格中显示的 XML To JSON 政策。

  5. 点击保存,保存当前修订版本以及您所做的更改。
  6. 如需将更改部署到修订版本,请点击部署,然后按照部署 API 代理中的说明操作。

经典版 Apigee 界面

如需将 XMLtoJSON 政策添加到代理,请执行以下操作:

  1. 在浏览器中打开 Apigee 界面并登录。
  2. 点击主窗口中的 API 代理,然后选择一个代理。在此示例中,请选择您在第 2 步:创建 API 代理中创建的代理。
  3. 点击 开发 标签页:

    点击代理编辑器中的“开发”标签页。

    Apigee 会显示 API 代理编辑器。

  4. 导航窗格中,点击代理端点 > 默认 > PreFlow

    Apigee 会显示流编辑器:

    Flow Editor。

    此外,Apigee 会在代码窗格中显示默认的代理端点配置:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ProxyEndpoint name="default">
      <Description/>
      <FaultRules/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <Flows/>
      <HTTPProxyConnection>
        <BasePath>/myproxy</BasePath>
        <Properties/>
        <VirtualHost>default</VirtualHost>
        <VirtualHost>secure</VirtualHost>
      </HTTPProxyConnection>
      <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
      </RouteRule>
    </ProxyEndpoint>
  5. 要向代理添加政策,请点击响应 PreFlow(流程编辑器下半部分)中的 + 步骤按钮:

    + 响应 PreFlow 中的“步骤”按钮。

    Apigee 在添加对话框中显示已分类的政策列表,您可以将其添加到流中:

    政策列表。

  6. 向下滚动,然后选择“中介”类别中的 XMLtoJSON 政策。
  7. 保留默认名称,然后点击添加

    Apigee 会将新政策附加到响应的 PreFlow 中:

    响应 Preflow 中附加的新政策。

    请注意,当您点击添加时,Apigee 将执行以下操作:

    • 导航窗格中的政策下添加新政策。
    • 窗格中添加 XMLtoJSON 政策。
    • 代码窗格中显示政策的配置 XML。
  8. 点击保存,保存当前修订版本以及您所做的更改。
  9. 如需部署更改,请点击概览标签页,然后点击部署按钮。

测试新政策

如需测试新政策,请在终端窗口中执行以下 curl 命令:

curl https://YOUR_ENV_GROUP_HOSTNAME/myproxy

其中,YOUR ENV_GROUP_HOSTNAME 是环境组主机名。请参阅查找环境组主机名

如需了解详情,请参阅调用 API 代理

您也可以在浏览器中打开同一网址。

您应该会收到以下响应:

{
  "root": {
    "city": "San Jose",
    "firstName": "John",
    "lastName": "Doe",
    "state": "CA"
  }
}

如果响应正文如下所示,请检查:

  1. 您的目标端点为 https://mocktarget.apigee.net/xml,如第 4 步:更改目标端点中所述:
    • 如果您收到的响应是 Hello, Guest!,则需要将 /xml 附加到目标端点的末尾。
    • 如果您收到 404,请确保您访问的是 apigee.net 而不是 apigee.com
  2. 系统会部署代理的最新修订版本。按照部署 API 代理取消部署 API 代理中的说明,尝试重新部署 API 代理。

如需查看 HTTP 请求和响应标头,请使用 -vs 选项启用 curl 中的详尽程度(v 使响应变详细,但 s 禁止显示部分不太有趣的细节)。 以下示例假定代理名为 myproxy

curl -vs https://YOUR_ENV_GROUP_HOSTNAME/myproxy  | python -m json.tool

您应该会看到如下所示的响应。请注意,响应中的 Content-Type 标头为 application/json。XMLtoJSON 政策将更改标头,然后再发回响应。

*   Trying 10.20.30.40...
* TCP_NODELAY set
* Connected to apitest.acme.com (10.20.30.40) port 443 (#0)
...
> GET /myproxy HTTP/1.1
> Host: apitest.acme.com
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 25 May 2018 16:20:00 GMT
< Content-Type: application/json;charset=UTF-8
< Content-Length: 77
< Connection: keep-alive
< X-Powered-By: Apigee
< Access-Control-Allow-Origin: *
...
{ [77 bytes data]
{
  "root": {
    "city": "San Jose",
    "firstName": "John",
    "lastName": "Doe",
    "state": "CA"
  }
}

下一步

更加深入