第 5 章 将策略链与 APIcast 原生部署集成
对于原生 APIcast 部署,您可以通过使用 THREESCALE_CONFIG_FILE
环境变量指定配置文件来集成 自定义策略链。以下示例指定了配置文件 example.json
:
THREESCALE_CONFIG_FILE=example.json bin/apicast
5.1. 在策略中使用变量和过滤器
一些 标准策略 支持 Liquid 模板化,它不仅允许使用纯字符串值,也允许在请求上下文中使用变量。
要使用上下文变量,将其名称打包在 {{
和 }} 中
,例如: {{ uri }}
。如果变量是对象,您也可以访问其属性,例如: {{ somevar.attr }}
。
以下是所有策略中的标准变量:
-
uri
:此路径中排除的查询参数请求的路径。嵌入式 NGINX 变量的值$uri
。 -
host
:请求的主机,这是嵌入式 NGINX 变量$host
的值。 -
remote_addr
:客户端的 IP 地址,这是嵌入式 NGINX 变量$remote_addr
的值。 -
headers
:包含请求标头的对象。使用{{headers['Some-Header']}}
获取特定的标头值。 -
http_method
:请求方法:GET、POST 等。
这些标准变量在请求的上下文中使用,但策略可以在上下文中添加更多变量。阶段是指 APIcast 具有的所有执行步骤。在以下情况下,策略链中的所有策略都可以使用变量:
- 在同一阶段中,如果在策略中添加了变量,然后在添加后在以下策略中使用。
- 如果在阶段中添加变量,则可在后续阶段使用此变量。
以下是标准 3scale APIcast 策略添加到上下文中的变量示例:
-
jwt
:用于 OpenID Connect 身份验证的 JWT 令牌解析 JSON 有效负载。 -
credentials
:保存应用凭据的对象。示例:"app_id":"972f7b4f"
,"user_key":"13b668c4d1e10eaebaa5144b4749713f"
. -
service
:一个对象,用于存储处理当前请求的服务的配置。示例:服务 ID 将为 {{ service.id }}。
有关上下文中可用对象和值的完整列表,请参阅 Liquid 上下文调试。
变量配合 Liquid 模板使用。示例: {{ remote_addr }}
、{{ headers['Some-Header'] }}
、{{ jwt.aud }}
.支持这些值的变量的策略具有一个特殊参数,通常使用 _type
后缀,如 value_type
、name_type
,接受两个值:纯文本"plain",以及"liquid"用于 liquid 模板。
APIcast 还支持 Liquid 过滤器,可应用于变量的值。过滤器将 NGINX 功能应用到 Liquid 变量的值。
过滤器在变量输出标签 {{
}}
中放置,紧随变量的名称或通过竖线字符 |
和过滤器的名称来排列的字面值。示例:
-
{{ 'username:password' | encode_base64 }}
,其中username:password
是变量。 -
{{ uri | escape_uri }}
。
有些过滤器不需要参数,因此您可以使用空字符串而不是 变量。示例: {{ '' | utctime }}
将以 UTC 时区返回当前时间。
过滤器可以按如下所示链接:{{ variable | function1 | function2 }}
。示例: {{ '' | utctime |scap_uri }}
.
以下是可用功能列表: