Developer Guide
Overview#
This documentation explains how to develop this project.
Prerequisites#
- Python 3.7+
- APISIX 2.7.0+
Debug#
- Run
make setupinstallation dependencies - Run
make installinstallation runner to system - Run
make devto start it
Plugin#
Plugin directory#
/path/to/apisix-python-plugin-runner/apisix/pluginthe .py files in this directory autoload
Plugin example#
/path/to/apisix-python-plugin-runner/apisix/plugin/stop.py/path/to/apisix-python-plugin-runner/apisix/plugin/rewrite.pyPlugin Format#
from typing import Anyfrom apisix.runner.http.request import Requestfrom apisix.runner.http.response import Responsefrom apisix.runner.plugin.core import PluginBase
class Test(PluginBase):
def name(self) -> str: """ The name of the plugin registered in the runner :return: """ return "test"
def config(self, conf: Any) -> Any: """ Parse plugin configuration :param conf: :return: """ return conf
def filter(self, conf: Any, request: Request, response: Response): """ The plugin executes the main function :param conf: plugin configuration after parsing :param request: request parameters and information :param response: response parameters and information :return: """
# print plugin configuration print(conf)
# Fetch request nginx variable `host` host = request.get_var("host") print(host)
# Fetch request body body = request.get_body() print(body)
# Set response headers response.set_header("X-Resp-A6-Runner", "Python")
# Set response body response.set_body("Hello, Python Runner of APISIX")
# Set response status code response.set_status_code(201)- Plugins must inherit the
PluginBaseclass and implement all functions.namefunction: used to set the registered plugin name.configfunction: used to parse plugin configuration.filterfunction: used to filter requests.confparameter: plugin configuration after parsing.requestparameter: Request object, which can be used to get and set request information.responseparameter: Response object, which can be used to set response information.
Test#
Run make test.
Data Format#
Data Protocol#
1 byte of type + 3 bytes of length + data