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:

ParameterNameTypeOptionalDefaultDescription
queryObjectYesSpecify QueryString for all request
headersObjectYesSpecify Header for all request
timeoutNumberYes3000Aggregate Api timeout in ms
pipelineHttpRequestNoRequest's detail

HttpRequest

ParameterNameTypeOptionalDefaultDescription
versionEnumYes1.1http version: 1.0 or 1.1
methodEnumYesGEThttp method, such as:GET.
queryObjectYesrequest‘s QueryString, if Key is conflicted with global query, this setting’s value will be setted.
headersObjectYesrequest‘s Header, if Key is conflicted with global headers, this setting’s value will be setted.
pathStringNohttp request's path
bodyStringYeshttp request's body

Batch Api Response:

Response is Array of HttpResponse.

HttpResponse

ParameterNameTypeDescription
statusIntegerhttp status code
reasonStringhttp reason phrase
bodyStringhttp response body
headersObjecthttp 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.