第 5 步:添加政策

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

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

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

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

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

新版代理编辑器

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

创建政策的实例

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

  1. 如果您使用的是 Cloud 控制台中的 Apigee 界面:选择代理开发 > API 代理

    如果您使用的是经典版 Apigee 界面:请选择开发 > 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 代理中的说明操作。

经典版代理编辑器

如需将 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"
  }
}

下一步

更加深入