请求和响应变量

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

向 API 代理发出请求时,您可以根据 API 代理的配置方式传递以下部分或全部信息:

  • 请求标头
  • 查询参数
  • 表单数据
  • XML 或 JSON 载荷
  • 资源 URI

默认情况下,请求中的所有数据都会从 ProxyEndpoint 传递到 TargetEndpoint,并且保持不变。因此,当 TargetEndpoint 向后端服务器发出请求时,原始请求中的所有信息都会传递到后端服务。

Apigee 收到从后端服务收到的响应也是如此。默认情况下,在响应中收到的所有数据都会传递到发起请求的应用,并且保持不变。

如何向后端服务器传递请求数据?

下图显示了一个 API 代理定义:

通过代理端点从 HTTP 客户端传递到后端上的目标端点的请求以到达 HTTP 服务。提供了代理端点和目标端点的示例。

对于此 API 代理:

  • API 代理虚拟主机default
  • 由环境组中的主机名定义的网域http://www.example.com
  • 代理基本路径/v1/weather
  • 通过路由规则指定的 TargetEndpointdefault
  • 目标网址http://weather.yahooapis.com

客户端应用使用以下 curl 命令向 API 代理发出 GET 请求:

curl -X GET http://www.example.com/v1/weather/forecastrss?w=12797282

请注意,此请求包含资源 forecastrss 和一个查询参数 w。Apigee 按如下所示解析请求,并将请求的某些部分分配给流变量:

{request.verb} {proxy.basepath}/{proxy.pathsuffix}?{request.querystring}

流变量可使用以下值进行设置:

  • request.verbGET
  • proxy.basepath/v1/weather
  • proxy.pathsuffixforecastrss
  • request.querystringw=12797282

TargetEndpoint 接着使用请求中的信息向后端服务发出请求:

{request.verb} {target.basepath}/{proxy.pathsuffix}?{request.querystring}

注意请求中指定的资源和查询参数会自动包含在要发送给后端服务器的请求中。根据 TargetEndpoint 的定义,该请求将采用以下格式:

curl -X GET http://weather.yahooapis.com/forecastrss?w=12797282

与查询参数一样,您在 API 代理中包含的任何标头或表单参数都会传递给后端服务器。例如,您发出了以下包含标头的请求:

curl -X GET -H 'Content-type:application/xml' http://www.example.com/v1/weather/forecastrss?w=12797282

或采用以下格式的包含标头和表单数据的请求:

curl -X POST -H "Content-type:application/json" -d \
  '{"email" : "janetutorialxml@example.com",
    "firstName" : "Jane",
    "lastName" : "Tutorial",
    "userName" : "jtutorialxml"
  }' \
  http://www.example.com/v1/register/user

在这两个示例中,标头和表单数据均传递给后端服务,并且保持不变。标头采用流变量(如 request.headers.countrequest.headers.names)表示。表单数据采用流程变量(如 request.formparam.countrequest.formparam.names)表示。

如何返回响应数据?

默认情况下,Apigee 在响应中从后端服务收到的所有数据都会传递道发起请求的应用。如上所述,对于请求,可在响应中通过 Apigee 中的流变量访问响应中返回的数据。如需了解详情,请参阅流变量参考文档

访问 API 代理中的请求和响应数据

在将请求数据发送到后端服务器之前,您有多次想要修改请求数据。例如:

  • 移除 Apigee 用于验证请求的安全信息。后端服务不需要这些信息。
  • 添加发送到后端服务的数据,例如跟踪用户或收集分析数据。
  • 根据请求数据有条件地处理请求。例如,一个 API 代理可以有多个 TargetEndpoint。请求使用的 TargetEndpoint 由请求数据确定。然后,您可以将该数据从请求中删除,然后再将其发送到后端服务。

对于响应中的数据也是如此。作为响应处理的一部分,API 代理可能需要修改数据,然后再将其返回给发出请求的应用。

访问请求消息

您可以使用政策来访问和更改请求消息的各个部分。这些部分包括:

  • 标头
  • 查询参数
  • 表单参数
  • 源 IP 地址
  • HTTP 消息正文

在正常的流中,处理请求后,代理接着会将转换后的请求发送到目标。

政策可以检查请求变量,然后根据这些变量的内容转换或拒绝请求。政策通过设置适当的变量来转换请求,例如,与请求标头相对应的变量。

访问响应消息

使用适用于响应消息的变量,政策可以访问消息组件,包括标头、查询参数、表单参数、源 IP 地址、HTTP 消息正文等。

代理接收响应消息,然后根据对响应评估的条件应用一系列政策,这些政策可修改或转换响应。

政策可以检查响应变量,然后根据这些变量的内容转换或拒绝请求。政策通过设置适当的变量来转换响应,例如,与响应标头相对应的变量。

访问流变量的常用政策

Apigee 定义了几种可用于处理请求和响应数据的政策。这些政策包括: