Skip to content

Latest commit

 

History

History
139 lines (118 loc) · 4.8 KB

batch-requests.md

File metadata and controls

139 lines (118 loc) · 4.8 KB

目录

简介

batch-requests 插件可以一次接受多个请求并以 http pipeline 的方式在网关发起多个http请求,合并结果后再返回客户端,这在客户端需要访问多个接口时可以显著地提升请求性能。

提示

外层的 Http 请求头会自动设置到每一个独立请求中,如果独立请求中出现相同键值的请求头,那么只有独立请求的请求头会生效。

属性

如何启用

本插件默认启用。

批量接口请求/响应

插件会为 apisix 创建一个 /apisix/batch-requests 的接口来处理你的批量请求。

接口请求参数:

参数名 类型 可选 默认值 描述
query Object Yes 给所有请求都携带的 QueryString
headers Object Yes 给所有请求都携带的 Header
timeout Number Yes 3000 聚合请求的超时时间,单位为 ms
pipeline HttpRequest No Http 请求的详细信息

HttpRequest

参数名 类型 可选 默认值 描述
version Enum Yes 1.1 请求用的 http 协议版本,可以使用 1.0 or 1.1
method Enum Yes GET 请求使用的 http 方法,例如:GET.
query Object Yes 独立请求所携带的 QueryString, 如果 Key 和全局的有冲突,以此设置为主。
headers Object Yes 独立请求所携带的 Header, 如果 Key 和全局的有冲突,以此设置为主。
path String No 请求路径
body String Yes 请求体

接口响应参数:

返回值为一个 HttpResponse数组

HttpResponse

参数名 类型 描述
status Integer Http 请求的状态码
reason String Http 请求的返回信息
body String Http 请求的响应体
headers Object Http 请求的响应头

测试插件

你可以将要访问的请求信息传到网关的批量请求接口( /apisix/batch-requests ),网关会以 http pipeline 的方式自动帮你完成请求。

curl --location --request POST 'http://127.0.0.1:9080/apisix/batch-requests' \
--header 'Content-Type: application/json' \
--d '{
    "headers": {
        "Content-Type": "application/json",
        "admin-jwt":"xxxx"
    },
    "timeout": 500,
    "pipeline": [
        {
            "method": "POST",
            "path": "/community.GiftSrv/GetGifts",
            "body": "test"
        },
        {
            "method": "POST",
            "path": "/community.GiftSrv/GetGifts",
            "body": "test2"
        }
    ]
}'

返回如下:

[
    {
        "status": 200,
        "reason": "OK",
        "body": "{\"ret\":500,\"msg\":\"error\",\"game_info\":null,\"gift\":[],\"to_gets\":0,\"get_all_msg\":\"\"}",
        "headers": {
            "Connection": "keep-alive",
            "Date": "Sat, 11 Apr 2020 17:53:20 GMT",
            "Content-Type": "application/json",
            "Content-Length": "81",
            "Server": "APISIX web server"
        }
    },
    {
        "status": 200,
        "reason": "OK",
        "body": "{\"ret\":500,\"msg\":\"error\",\"game_info\":null,\"gift\":[],\"to_gets\":0,\"get_all_msg\":\"\"}",
        "headers": {
            "Connection": "keep-alive",
            "Date": "Sat, 11 Apr 2020 17:53:20 GMT",
            "Content-Type": "application/json",
            "Content-Length": "81",
            "Server": "APISIX web server"
        }
    }
]

禁用插件

正常来说你不需要禁用本插件,如果有特殊情况,请从 /conf/config.yamlplugins 节点中移除即可。