请求上下文
> 文档中心 > 文档中心 > INFINI Gateway > 功能手册 > 请求上下文

请求上下文 #

什么是上下文 #

上下文是极限网关用来访问当前运行环境下相关信息的入口,如请求的来源和配置信息等等,使用关键字 _ctx 即可访问相应的字段,如:_ctx.request.uri 表示请求的 URL 地址。

内置请求上下文 #

HTTP 请求内置的 _ctx 上下文对象主要包括如下:

名称类型说明
iduint64请求的唯一 ID
tlsbool表示请求是否 TLS
remote_ipstring客户端来源 IP
remote_addrstring客户端来源地址,包含端口
local_ipstring网关本地 IP
local_addrstring网关本地地址,包含端口
elapsedint64请求已执行时间(毫秒)
request.*object描述请求信息
response.*object描述响应信息

request #

request 对象包含以下属性:

名称类型说明
to_stringstring文本格式的 HTTP 完整请求信息
hoststring访问的目标主机名/域名
methodstring请求类型
uristring请求完整地址
pathstring请求路径
query_argsmapUrl 请求参数
usernamestring发起请求的用户名
passwordstring发起请求的密码信息
headermapHeader 参数
bodystring请求体
body_jsonobjectJSON 请求体对象
body_lengthint请求体长度

如果客户端提交的请求体数据类型是 JSON 格式,可以通过 body_json 来直接访问,举例如下:

curl -u tesla:password -XGET "http://localhost:8000/medcl/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query":{
	"bool":{
	"must":[{"match":{"name":"A"}},{"match":{"age":18}}]
	}
},
"size":900,
  "aggs": {
    "total_num": {
      "terms": {
        "field": "name1",
        "size": 1000000
      }
    }
  }
}'

在 JSON 里面通过 . 来标识路径,如果是数组则使用 [下标] 来访问指定的元素,比如可以使用一个 dump 过滤器来进行调试,如下:

  - name: cache_first
    filter:
      - dump:
          context:
            - _ctx.request.body_json.size
            - _ctx.request.body_json.aggs.total_num.terms.field
            - _ctx.request.body_json.query.bool.must.[1].match.age

输出结果如下:

_ctx.request.body_json.size  :  900
_ctx.request.body_json.aggs.total_num.terms.field  :  name1
_ctx.request.body_json.query.bool.must.[1].match.age  :  18

response #

response 对象包含以下属性:

名称类型说明
to_stringstring文本格式的 HTTP 完整响应信息
statusint请求状态码
headermapHeader 参数
content_typestring响应请求体类型
bodystring响应体
body_jsonobjectJSON 请求体对象
body_lengthint响应体长度

系统上下文 #

系统上下文对象 _sys.* 有如下属性:

名称类型说明
hostnamestring网关所在服务器主机名
month_of_nowint当前时间的月份,范围 [1,12]
weekday_of_nowint当前时间的周几,范围 [0,6], 0 is Sunday
day_of_nowint当前时间的自然天值
hour_of_nowint当前时间的小时值,范围 [0,23]
minute_of_nowint当前时间的分钟值,范围 [0,59]
second_of_nowint当前时间的秒值,范围 [0,59]
unix_timestamp_of_nowint当前时间的 Unix 时间戳
unix_timestamp_milli_of_nowint64当前时间的 Unix 时间戳,毫秒精度

其它 #

_util.* 主要用于获取一些特殊的变量:

名称类型说明
generate_uuidstring生成一个随机 UUID
increment_idstring生成一个自增 ID,默认桶名 default, 支持自定义, e.g., _util.increment_id.mybucket