请求上下文

请求上下文 #

什么是上下文 #

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

内置请求上下文 #

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

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

request #

request 对象包含以下属性:

名称类型说明
hoststring访问的目标主机名/域名
methodstring请求类型
uristring请求完整地址
pathstring请求路径
query_argsmapUrl 请求参数
userstring发起请求的用户名
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 对象包含以下属性:

名称类型说明
statusint请求状态码
headermapHeader 参数
content_typestring响应请求体类型
bodystring响应体
body_lengthint响应体长度