内容简介:Kanary:基于Kotlin的可扩展RESTful API Web框架
原文: Kanary
作者: SeunAdelekan
翻译:Vincent
译者注:本文主要讲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作为插件库
<repositories> <repository> <id>jcenter</id> <name>JCenter</name> <url>https://jcenter.bintray.com/</url> </repository> </repositories>
将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序列化/反序列化)
创建Kanary是为了能够用Kotlin编程语言实现稳定且非冗长的RESTful API。
公约与配置
Kanary旨在利用高效的方法帮助工程师和开发人员创建基于微服务的应用程序。对于这种方法,开发人员不会强制约定。实施应用程序的方法由实施者自行决定。
Road map(路线图)- 增加测试
- 创建大量示例应用程序,演示使用Kanary
- 创建cli工具以支持快速创建Kanary应用程序
- 添加备份加载功能,更改和保存应用程序文件
- 管理通知邮件
- 对于那些希望以MVC为导向的方式使用Canary的模板引擎系统的实现 [*]添加对其他流行应用程序服务器(如Tomcat和Netty)的支持
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 优秀开源框架的扩展机制实现
- 阿里 Sentinel 框架的一些小扩展
- LaserCrack:一款可扩展的暴力破解框架
- Asf PHP扩展框架之预警模块介绍
- Flask框架从入门到精通之扩展脚本(十五)
- Nfstream:一款易于扩展的网络数据分析框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Clean Architecture
Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99
Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!