module
"kong.plugins.<plugin_name>.api"
用户通过 Admin API 来配置 Kong。如果你的插件有自定义实体或者管理的需求,你就需要扩展 Admin API。这将允许你暴露你自己的接口来实现你自己的管理逻辑。这里的例子将实现对 API keys的创建、检索和删除。
Admin API 是一个 Lapis 的应用。Kong 的抽象层将使你简单的添加接口。
这章假设你有一定的 Lapis相关的知识。
添加一个接口到 Admin API
如果按照下边的命名方式来定义module, Kong 将检索并加载你的接口:
"kong.plugins.<plugin_name>.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
}
}
网友评论