Kong 插件开发 - 扩展 Admin API

module

"kong.plugins..api"

用户通过 Admin API 来配置 Kong。如果你的插件有自定义实体或者管理的需求,你就需要扩展 Admin API。这将允许你暴露你自己的接口来实现你自己的管理逻辑。这里的例子将实现对 API keys的创建、检索和删除。

Admin API 是一个 Lapis 的应用。Kong 的抽象层将使你简单的添加接口。

这章假设你有一定的 Lapis相关的知识。

添加一个接口到 Admin API

如果按照下边的命名方式来定义module, Kong 将检索并加载你的接口:

"kong.plugins..api"

这个模块是一个返回包含描述路由的字符串,和 HTTP 支持的方法。路由将赋值一个简单的处理函数。例如:

return {
  ["/my-plugin/new/get/endpoint"] = {
    GET = function(self, dao_factory, helpers)
      -- ...
    end
  }
}

这个处理函数有3个三处,分别是:

  • self: 请求的对象
  • dao_factory: DAO Factory
  • helpers: 一个包含一些helpers的 table。

除了支持的 HTTP 方法之外,路由 table 还可以包含以下两个 keys:

  • befor: 像在 Lapis, befor_filter 值 动作方法之前执行
  • on_error: 一个重写Kong提供的自定义的错误处理函数。

helpers

在处理一个 Admin API 请求的时候,有时候希望发送响应并处理错误,帮助做这些的是第三个参数:helpres,它有以下属性:

  • response:
  • yield_error: 这个函数来源于 Lapis。当处理程序遇到错误的时候调用。所有Kong的错误都有上下文的 table, 所以它可以根据这些错误发送对应的响应码。

curl_helpers

要实现的接口中大多数都有 CRUD 操作,你也可以使用 kong.api.curd_helpers 模块。这个模块提供为插入、检索、更新或删除操作 和 执行一些必要的 DAO 操作 和相应适当的 HTTP 状态码提供了一些helpers。它也提供了从 path中获取参数,例如 API 的名字或 ID, 或者消费者名字或 ID。

例如:

local crud = require "kong.api.crud_helpers"

return {
  ["/consumers/:username_or_id/key-auth/"] = {
    before = function(self, dao_factory, helpers)
      crud.find_consumer_by_username_or_id(self, dao_factory, helpers)
      self.params.consumer_id = self.consumer.id
    end,

    GET = function(self, dao_factory, helpers)
      crud.paginated_set(self, dao_factory.keyauth_credentials)
    end,

    PUT = function(self, dao_factory)
      crud.put(self.params, dao_factory.keyauth_credentials)
    end,

    POST = function(self, dao_factory)
      crud.post(self.params, dao_factory.keyauth_credentials)
    end
  }
}

你可能感兴趣的:(Kong 插件开发 - 扩展 Admin API)