kong插件-开发基础

基本概念

在这里插入图片描述
服务端状态码参照
链接

加载方式

plugins = bundled,my-custom-plugin # your plugin name here

插件组成

插件由两个必需模块组成:

simple-plugin
├── handler.lua
└── schema.lua

handler.lua是插件的核心,它是一个需要实现的接口,其各功能都将在请求/连接生命周期中运行。
schema.lua:由于插件可能必须保留用户输入的一些配置。此模块保存该配置。
进阶:

complete-plugin
├── api.lua
├── daos.lua
├── handler.lua
├── migrations
│   ├── init.lua
│   └── 000_base_complete_plugin.lua
└── schema.lua

在这里插入图片描述

handler.lua

handler.lua文件中定义以下任何函数,将可以在Kong Gateway(OSS)执行生命周期的各个入口点实现自定义逻辑。
在这里插入图片描述
下面的示例handler.lua文件定义了http和流通信中所有可能阶段的自定义函数。

两个需要注意的字段:
VERSION是一个信息字段,不直接由Kong Gateway(OSS)使用。它通常与插件的Rockspec版本中定义的版本相匹配(如果存在)。
PRIORITY用于在执行插件的每个阶段之前对插件进行排序,优先级较高的插件首先执行。

local CustomHandler = {
  VERSION  = "1.0.0"
  PRIORITY = 10
}

function CustomHandler:init_worker()
  -- Implement logic for the init_worker phase here (http/stream)
  kong.log("init_worker")
end


function CustomHandler:preread(config)
  -- Implement logic for the preread phase here (stream)
  kong.log("preread")
end


function CustomHandler:certificate(config)
  -- Implement logic for the certificate phase here (http/stream)
  kong.log("certificate")
end

function CustomHandler:rewrite(config)
  -- Implement logic for the rewrite phase here (http)
  kong.log("rewrite")
end

function CustomHandler:access(config)
  -- Implement logic for the rewrite phase here (http)
  kong.log("access")
end

function CustomHandler:header_filter(config)
  -- Implement logic for the header_filter phase here (http)
  kong.log("header_filter")
end

function CustomHandler:body_filter(config)
  -- Implement logic for the body_filter phase here (http)
  kong.log("body_filter")
end

function CustomHandler:log(config)
  -- Implement logic for the log phase here (http/stream)
  kong.log("log")
end

-- return the created table, so that Kong can execute it
return CustomHandler

schema.lua

kong官方地址
主要用于配置参数

在这里插入图片描述
一些继承的默认field
在这里插入图片描述
示例

-- schema.lua
local typedefs = require "kong.db.schema.typedefs"


return {
  name = "key-auth",
  fields = {
    {
      consumer = typedefs.no_consumer
    },
    {
      protocols = typedefs.protocols_http
    },
    {
      config = {
        type = "record",
        fields = {
          {
            key_names = {
              type = "array",
              required = true,
              elements = typedefs.header_name,
              default = {
                "apikey",
              },
            },
          },
          {
            hide_credentials = {
              type = "boolean",
              default = false,
            },
          },
          {
            anonymous = {
              type = "string",
              uuid = true,
              legacy = true,
            },
          },
          {
            key_in_body = {
              type = "boolean",
              default = false,
            },
          },
          {
            run_on_preflight = {
              type = "boolean",
              default = true,
            },
          },
        },
      },
    },
  },
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值