譯者注:本文主要講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)的支持
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。