2EXP / apisix-plugin-request-pipeline

apisix plugin - pipeline http requests and responses with Lua transformer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

apisix-plugin-request-pipeline

Build Status

Table of contents

Getting Started

This APISIX plugin helps pipelining requests and responses with Lua transformers.

Back to TOC

Usage

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

Back to TOC

Useful links

Back to TOC

About

apisix plugin - pipeline http requests and responses with Lua transformer

License:Apache License 2.0


Languages

Language:Perl 41.1%Language:Lua 25.5%Language:Shell 18.2%Language:Makefile 15.2%