apisix/doc/plugins/batch-requests.md
2020-06-19 12:03:55 +08:00

4.9 KiB
Raw Blame History

Chinese

Summary

Description

batch-requests can accept mutiple request and send them from apisix via http pipeline,and return a aggregated response to client,this can significantly improve performance when the client needs to access multiple APIs.

Tips

The HTTP headers for the outer batch request, except for the Content- headers such as Content-Type, apply to every request in the batch. If you specify a given HTTP header in both the outer request and an individual call, then the individual call header's value overrides the outer batch request header's value. The headers for an individual call apply only to that call.

Attributes

None

How To Enable

Default enbaled

Batch Api Request/Response

The plugin will create a api in apisix to handle your batch request.

Batch Api Request:

ParameterName Type Optional Default Description
query Object Yes Specify QueryString for all request
headers Object Yes Specify Header for all request
timeout Number Yes 3000 Aggregate Api timeout in ms
pipeline HttpRequest No Request's detail

HttpRequest

ParameterName Type Optional Default Description
version Enum Yes 1.1 http version: 1.0 or 1.1
method Enum Yes GET http method, such asGET.
query Object Yes request's QueryString, if Key is conflicted with global query, this setting's value will be setted.
headers Object Yes request's Header, if Key is conflicted with global headers, this setting's value will be setted.
path String No http request's path
body String Yes http request's body

Batch Api Response

Response is Array of HttpResponse.

HttpResponse

ParameterName Type Description
status Integer http status code
reason String http reason phrase
body String http response body
headers Object http response headers

Test Plugin

You can pass your request detail to batch api( /apisix/batch-requests ), apisix can automatically complete requests via http pipeline. Such as:

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"
        }
    ]
}'

response as below

[
    {
        "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"
        }
    }
]

Disable Plugin

Normally, you don't need to disable this plugin.If you does need please remove it from the plugins section of/conf/config.yaml.