batch-requests

简介

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

提示

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

属性

接口

插件会增加 /apisix/batch-requests 这个接口,你可能需要通过 interceptors 来保护它。

如何启用

本插件默认启用。

如何配置

默认本插件限制请求体的大小不能大于 1 MiB。这个限制可以通过 apisix/admin/plugin_metadata/batch-requests 来修改。

  1. curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/batch-requests -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "max_body_size": 4194304
  4. }'

元数据

名称 类型 必选项 默认值 有效值 描述
max_body_size integer 必选 1048576 > 0 请求体的最大大小,单位为字节。

批量接口请求/响应

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

接口请求参数:

参数名 类型 可选项 默认值 有效值 描述
query object 可选 给所有请求都携带的 QueryString
headers object 可选 给所有请求都携带的 Header
timeout number 可选 30000 聚合请求的超时时间,单位为 ms
pipeline HttpRequest 必须 Http 请求的详细信息

HttpRequest

参数名 类型 可选 默认值 有效值 描述
version string 可选 1.1 [1.0, 1.1] 请求用的 http 协议版本
method string 可选 GET [“GET”, “POST”, “PUT”, “DELETE”, “PATCH”, “HEAD”, “OPTIONS”, “CONNECT”, “TRACE”] 请求使用的 http 方法
query object 可选 独立请求所携带的 QueryString, 如果 Key 和全局的有冲突,以此设置为主。
headers object 可选 独立请求所携带的 Header, 如果 Key 和全局的有冲突,以此设置为主。
path string 必须 请求路径
body string 可选 请求体
ssl_verify boolean 可选 false 验证 SSL 证书与主机名是否匹配

接口响应参数:

返回值为一个 HttpResponse数组

HttpResponse

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

测试插件

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

  1. curl --location --request POST 'http://127.0.0.1:9080/apisix/batch-requests' \
  2. --header 'Content-Type: application/json' \
  3. --data '{
  4. "headers": {
  5. "Content-Type": "application/json",
  6. "admin-jwt":"xxxx"
  7. },
  8. "timeout": 500,
  9. "pipeline": [
  10. {
  11. "method": "POST",
  12. "path": "/community.GiftSrv/GetGifts",
  13. "body": "test"
  14. },
  15. {
  16. "method": "POST",
  17. "path": "/community.GiftSrv/GetGifts",
  18. "body": "test2"
  19. }
  20. ]
  21. }'

返回如下:

  1. [
  2. {
  3. "status": 200,
  4. "reason": "OK",
  5. "body": "{\"ret\":500,\"msg\":\"error\",\"game_info\":null,\"gift\":[],\"to_gets\":0,\"get_all_msg\":\"\"}",
  6. "headers": {
  7. "Connection": "keep-alive",
  8. "Date": "Sat, 11 Apr 2020 17:53:20 GMT",
  9. "Content-Type": "application/json",
  10. "Content-Length": "81",
  11. "Server": "APISIX web server"
  12. }
  13. },
  14. {
  15. "status": 200,
  16. "reason": "OK",
  17. "body": "{\"ret\":500,\"msg\":\"error\",\"game_info\":null,\"gift\":[],\"to_gets\":0,\"get_all_msg\":\"\"}",
  18. "headers": {
  19. "Connection": "keep-alive",
  20. "Date": "Sat, 11 Apr 2020 17:53:20 GMT",
  21. "Content-Type": "application/json",
  22. "Content-Length": "81",
  23. "Server": "APISIX web server"
  24. }
  25. }
  26. ]

禁用插件

正常情况不需要禁用本插件,如有需要,在 /conf/config.yaml 中新建一个所需的 plugins 列表,以覆盖原列表。