您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。信息
向 API 代理发出请求时,您可以根据 API 代理的配置方式传递以下部分或全部信息:
- 请求标头
- 查询参数
- 表单数据
- XML 或 JSON 载荷
- 资源 URI
默认情况下,请求中的所有数据都会从 ProxyEndpoint 传递到 TargetEndpoint,并且保持不变。因此,当 TargetEndpoint 向后端服务器发出请求时,原始请求中的所有信息都会传递到后端服务。
Edge 收到从后端服务收到的响应也是如此。默认情况下,在响应中收到的所有数据都会传递道发起请求的应用。
如何向后端服务器传递请求数据?
下图显示了一个 API 代理定义:
对于此 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.count
和 request.headers.names
)表示。表单数据采用流程变量(如 request.formparam.count
和 request.formparam.names
)表示。
如何返回响应数据?
默认情况下,Edge 在响应中从后端服务收到的所有数据都会传递道发起请求的应用。如上所述,对于请求,可在响应中通过 Edge 中的流变量访问响应中返回的数据。如需了解详情,请参阅流变量参考文档。
访问 API 代理中的请求和响应数据
在将请求数据发送到后端服务器之前,您有多次想要修改请求数据。例如:
- 移除 Edge 验证请求时使用的安全信息。后端服务不需要这些信息。
- 添加发送到后端服务的数据,例如跟踪用户或收集分析数据。
- 根据请求数据有条件地处理请求。例如,一个 API 代理可以有多个 TargetEndpoint。请求使用的 TargetEndpoint 由请求数据确定。然后,您可以将该数据从请求中删除,然后再将其发送到后端服务。
对于响应中的数据也是如此。作为响应处理的一部分,API 代理可能需要修改数据,然后再将其返回给发出请求的应用。
访问请求消息
您可以使用政策来访问和更改请求消息的各个部分。这些部分包括:
- 标头
- 查询参数
- 表单参数
- 源 IP 地址
- HTTP 消息正文
在正常的流中,处理请求后,代理接着会将转换后的请求发送到目标。
政策可以检查请求变量,然后根据这些变量的内容转换或拒绝请求。政策通过设置适当的变量来转换请求,例如,与请求标头相对应的变量。
访问响应消息
使用适用于响应消息的变量,政策可以访问消息组件,包括标头、查询参数、表单参数、源 IP 地址、HTTP 消息正文等。
代理接收响应消息,然后根据对响应评估的条件应用一系列政策,这些政策可修改或转换响应。
政策可以检查响应变量,然后根据这些变量的内容转换或拒绝请求。政策通过设置适当的变量来转换响应,例如,与响应标头相对应的变量。
访问流变量的常用政策
Edge 定义了几种可用于处理请求和响应数据的政策。这些政策包括:
- AssignMessage 政策:在 API 代理流期间创建或修改 HTTP 请求或响应消息。此外,还会创建并填充新的流变量。
- ExtractVariables 政策:从消息(包括标头、URI 路径、载荷和查询参数)中提取内容,以便在条件语句中使用。然后,该政策会将文本模式应用于消息内容,并在找到匹配项后设置指定变量。
- JSONtoXML 政策和 XMLtoJSON 政策:将消息从 JavaScript 对象表示法 (JSON) 转换为可扩展标记语言 (XML) 格式,反之亦然。
- JavaCallout 政策、JavaScript 政策、PythonScript 政策、RegularExpressionProtection 政策:借助这些政策,您可编写脚本来访问包含请求和响应数据的流变量。