Kanary:基于Kotlin的可扩展RESTful API Web框架

更新时间:2017-06-07 21:30:35 点击次数:727次

译者注:本文主要讲Kanary的安装和依赖等内容,旨在利用高效的方法帮助工程师和开发人员创建基于微服务。以下为译文


License:Apache 2.0 Download:0.9.0 
Code Climate:1 issues

Kanary是一个用于构建可扩展和富有表现力的的RESTful API的Kotlin Web框架,基于Apache 2.0,托管在Github上。Kanary是由Iyanu Adelekan创建,他是目前的项目负责人。

fun main(args: Array<String>) {

val app = KanaryApp()
val server = Server()
val userRouter = KanaryRouter()
val userController = UserController()

userRouter on "users/" use userController
userRouter.post("new/", userController::createUser)
userRouter.get("details/", userController::retrieveUser)

app.mount(userRouter)
server.handler = AppHandler(app)
server.listen(8080)

} 

安装

安装资源包含在com.iyanuadelekan.kanary包中,您可以在您的应用程序中通过Maven,Gradle和Ivy来导入这个包。在应用程序中引入以下代码:

Maven

包含Jcenter作为插件库 


jcenter 
JCenter 
https://jcenter.bintray.com/ 

将Kanary添加为项目依赖关系

<dependencies>
  ...
  <dependency>
<groupId>com.iyanuadelekan</groupId>
<artifactId>kanary</artifactId>
<version>0.9.0</version>
  </dependency>
  ...
</dependencies> 

Gradle

repositories {
jcenter()
}

dependencies {
compile 'com.iyanuadelekan:kanary:0.9.0'
} 

Ivy

<dependency org='com.iyanuadelekan' name='kanary' rev='0.9.0'>
  <artifact name='kanary'></artifact>
</dependency> 

其他

对于其他用例,您可以从bintray下载jar

特征

  • 表现路由

  • 专注于代码清晰度

  • 支持控制器

  • 包含HTTP助手

  • 完全支持异步中间件

  • 简洁的英语,如“一线”

  • 可用的动作生命周期回调方法

  • 快速开始

    这是详细的[项目包](Packages)

    创建一个Kanary应用程序并启动服务器。

    通过初始化KanaryApp,创建一个Server对象,一个AppHandler实例,将该实例设置为服务器的处理程序并启动服务器在指定的端口上侦听,创建一个简单的Kanary应用程序。

    fun main(args: Array<String>) {
      val app = KanaryApp()
      val server = Server()
    
      server.handler = AppHandler(app)
      server.listen(8080)
    } 

    创建控制器

    控制器是扩展KanaryController类的实例。下面的类是一个简单的控制器类,不执行任何操作。

    class DummyController : KanaryController() 

    创建动作控制器

    虽然上述控制器类是正确的,但通常您需要指定控制器中的动作来路由请求。

    一个动作是一个控制器函数,它将三个参数作为参数:

  • 一个请求的实例(一个可变的请求对象)

  • 一个HttpServletRequest的实例(一个不可变的请求对象)

  • HttpServletResponse(响应对象)的一个实例

  • 在下面的控制器中显示一个有效的动作:

    class UserController : KanaryController() {
    
    fun createUser(baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
    // action code goes here
    }
    
    } 

    动作控制器生命周期的回调

    在KanaryController中可以声明两个不同的动作生命周期回调。它们分别是:

  • beforeAction 如果声明,则在执行动作之前立即执行

  • afterAction 如果声明,则在执行动作后立即执行

  • 声明这两个回调与在控制器中声明一个函数一样简单:

    class UserController : KanaryController() {
    
    override fun beforeAction(request: HttpServletRequest, response: HttpServletResponse?) {
    println("I execute before anything else!")
    }
    
    override fun afterAction(request: HttpServletRequest, response: HttpServletResponse?) {
    println("I execute once an action is completed!")
    }
    
    fun createUser(baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
    // action code goes here
    }
    
    } 

    路由

    所有路由由一个或多个指定的路由器完成。路由是KanaryRouter的一个实例:

    val userRouter = KanaryRouter() 

    声明路由路径

    userRouter on "users/" use userController //router uses userController to cater for all routes prefixed by '/users'
    userRouter.post("new/", userController::createUser) //maps POST '/users/new' to the createUser action in userController 

    以上也可以用:

    userRouter.post("users/new/", userController::createUser, userController) 

    安装路由器到应用程序

    单个路由可以挂载到KanaryApp的一个实例上,如下所示:

    app.mount(userRouter) 

    可以随时安装无数路由:

    app.mount(routerA, routerB, routerC, ..., routerN) 

    中间件

    所有的中间件都采用lambda的形式。HttpServletRequest的单个可空的实例被传递给添加到应用程序的每个中间件。

    app.use { println("I'm middleware!") }
    app.use { println("Request path info: ${it.pathInfo}") } 

    可以随时添加多个中间件:

    app.use({ println("I'm middleware!") }, { println("Request path info: ${it.pathInfo}") } ) 

    重要的是,要注意所有中间件以与主应用程序线程并行的非阻塞方式执行。

    捆绑中间件

    与Kanary捆绑在一起的中间件是“simpleConsoleRequestLogger”。它打印出关于向控制台收到的每个请求的简洁信息。

    app.use(simpleConsoleRequestLogger) 

    处理请求和响应

    处理请求

    在大多数情况下,请求处理通过创建一个HttpServletRequest来完成一个动作响应。 
    这个 HttpServletRequest是Java的一个对象,它是Kanary特定的帮助函数。 
    提供的这些附加功能包括:

    一个可变请求对象以请求实例的形式显示。HttpServletRequest请求实现,因此具有类似于传递给HttpServletRequest实例拥有的行为和特征。除了上表所示的功能外,传递的请求实例有: 

    响应请求

    使用HttpServletResponse将一个动作响应发送给客户端。除了此实例暴露的所有特征和行为之外,还可以使用以下Kanary特定的帮助函数:

    除“sendFile”之外的所有功能都可以用中缀符号(在Kanary中编写代码的推荐方式)编写。这样可以写出清晰和表现力强的代码来回应客户。这样就可以向客户端发送纯文本消息:

    class UserController : KanaryController() {
    
    fun createUser(baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
    response withStatus 201 send "User successfully created!"
    baseRequest.done()
    }
    
    } 

    Packages(包)

    Dependencies(依赖)

  • Jetty(作为应用服务器引擎)

  • Jackson-databind (对于JSON序列化/反序列化)

  • Philosophy(原理)

    创建Kanary是为了能够用Kotlin编程语言实现稳定且非冗长的RESTful API。

    公约与配置

    Kanary旨在利用高效的方法帮助工程师和开发人员创建基于微服务的应用程序。对于这种方法,开发人员不会强制约定。实施应用程序的方法由实施者自行决定。

    Road map(路线图)

  • 增加测试

  • 创建大量示例应用程序,演示使用Kanary

  • 创建cli工具以支持快速创建Kanary应用程序

  • 添加备份加载功能,更改和保存应用程序文件

  • 管理通知邮件

  • 对于那些希望以MVC为导向的方式使用Canary的名门棋牌官网下载安装引擎系统的实现

  • 添加对其他流行应用程序服务器(如Tomcat和Netty)的支持

  • 本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

    回到顶部
    嘿,我来帮您!