This APISIX plugin helps pipelining requests and responses with Lua transformers.
Create request pipeline:
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/request-trans' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-H 'Content-Type: application/json' \
-d '
{
"uri": "/request-trans",
"plugins": {
"request-pipeline": {
"pipeline": [
{
"path": "/original"
},
{
"path": "/trans1",
"return_status": [404]
},
{
"path": "/trans2"
}
]
}
}
}'
Create original request's route:
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/original' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-H 'Content-Type: application/json' \
-d '
{
"uri": "/original",
"plugins": {
"serverless-pre-function": {
"phase": "access",
"functions": [
"return function(conf, ctx)
local core = require(\"apisix.core\")
core.response.exit(200, \"original request\")
end"
]
}
}
}'
Use serverless
plugin to create two corresponding trasformers:
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/trans1' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-H 'Content-Type: application/json' \
-d '
{
"uri": "/trans1",
"plugins": {
"serverless-pre-function": {
"phase": "access",
"functions": [
"return function(conf, ctx)
local core = require(\"apisix.core\")
local err = core.request.header(ctx, \"X-Trans1-ERROR\")
local status = err and 404 or 200
local body = core.request.get_body()
core.response.exit(status, body .. \" -> trans1\")
end"
]
}
}
}'
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/trans2' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-H 'Content-Type: application/json' \
-d '
{
"uri": "/trans2",
"plugins": {
"serverless-pre-function": {
"phase": "access",
"functions": [
"return function(conf, ctx)
local core = require(\"apisix.core\")
local body = core.request.get_body()
core.response.exit(200, body .. \" -> trans2\")
end"
]
}
}
}'
Test it!
curl -i -X GET "http://127.0.0.1:9080/request-trans"
Result:
original request -> trans1 -> trans2
One more test!
curl -i -X GET "http://127.0.0.1:9080/request-trans"
Result:
original request -> trans1