请求和响应变量

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

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

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

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

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

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

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

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

对于此 API 代理:

  • API 代理虚拟主机:“default”
  • 虚拟主机定义的网域:“http://myOrg-prod.apigee.net”
  • 代理基本路径:“/v1/weather”
  • 路由规则指定的 TargetEndpoint:“default”
  • 目标网址:“http://weather.yahooapis.com”

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

curl -X GET http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282

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

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

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

  • request.verb:“GET”
  • proxy.basepath:“/v1/weather”
  • proxy.pathsuffix:“forecastrss”
  • request.querystring:“w=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://myOrg-prod.apigee.net/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://myOrg-prod.apigee.net/v1/register/user

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

如何返回响应数据?

默认情况下,Edge 从响应中从后端服务接收的所有数据都将原封不动地传递给发起请求的应用。如上所述,对于请求,响应中返回的数据可通过 Edge 上的流变量访问。如需了解详情,请参阅流变量参考文档

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

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

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

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

访问请求消息

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

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

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

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

访问响应消息

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

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

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

访问流变量的常用政策

Edge 定义了多项政策,可用于处理请求和响应数据。这些政策包括: