阅读更多
引用
原文: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(依赖)
Philosophy(原理)

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

公约与配置

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

Road map(路线图)
  • 增加测试
  • 创建大量示例应用程序,演示使用Kanary
  • 创建cli工具以支持快速创建Kanary应用程序
  • 添加备份加载功能,更改和保存应用程序文件
  • 管理通知邮件
  • 对于那些希望以MVC为导向的方式使用Canary的模板引擎系统的实现
  • [*]添加对其他流行应用程序服务器(如Tomcat和Netty)的支持
  • 大小: 111.1 KB
  • 大小: 9.4 KB
  • 大小: 13.6 KB
  • 大小: 7.4 KB
  • 大小: 39.4 KB
  • 大小: 19 KB
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Kanary:用于在KotlinJava中构建REST API的极简Web框架

    Kanary:用于在KotlinJava中构建REST API的极简Web框架

  • kanary:Kubernetes Operator使用HAProxy管理金丝雀部署

    Kanary:Kubernetes的Canary发布运​​营商 该Kubernetes运营商旨在使用HAProxy容器作为L4(TCP)负载均衡器来管理Canary发布部署操作员安装kubectl apply -f ...简称ky kubectl get kanaryNAME AG

  • Api-Kanary.zip

    Api-Kanary.zip,在kotlin/java.kanary中构建restapi的极简web框架,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了...

  • Kanary-crx插件

    语言:English (United States) Kanary隐私权政策解析器 Web扩展,可获取您的URL并将其发送到基于R的文本挖掘工具。

  • Android-Kanary用于构建

    Kanary:用于构建

  • Kotlin

    标题历史简介 Kotlin是JetBrains团队开发的一门基于 JVM 的,现代的、注重工程实用性的静态类型编程语言。Kotlin可以编译成Java字节码,也可以编译成...语法简单优雅、表现力丰富、抽象扩展方便、代码可重用性好,...

  • 云原生生态周报 Vol. 6 | KubeCon EU 特刊

    KEDA 在“事件驱动的水平扩展”这一细分领域,跟 Kubernetes 项目本身有着更好的集成度,更多的强调可扩展性和接口的设计,显然也有推动这一领域技术标准化的含义。 相关链接: Microsoft 发布的 Service Mesh ...

  • 物业公司绩效考核制度.doc

    物业公司绩效考核制度

  • 2025最新小学数学义务教育课程标准(2022年版)必考题库附含答案.docx

    2025最新小学数学义务教育课程标准(2022年版)必考题库附含答案.docx

  • SDL-1.2.15-17.el7.x64-86.rpm.tar.gz

    1、文件内容:SDL-1.2.15-17.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/SDL-1.2.15-17.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

  • 软件研发绩效考核办法.doc

    软件研发绩效考核办法

  • FactoryIO液位PID仿真程序入门指南:使用TIA Portal V15与FactoryIO 2.4.0的梯形图编程,factoryio液位PID仿真程序 使用简单的梯形图编写,通俗易懂,起到抛

    FactoryIO液位PID仿真程序入门指南:使用TIA Portal V15与FactoryIO 2.4.0的梯形图编程,factoryio液位PID仿真程序 使用简单的梯形图编写,通俗易懂,起到抛砖引玉的作用,比较适合有动手能力的入门初学者。 软件环境: 1、西门子编程软件:TIA Portal V15(博图V15) 2、FactoryIO 2.4.0 内容清单: 1、FactoryIO中文说明书+场景模型文件 2、博图V15PLC程序(源码)。 ,核心关键词:FactoryIO液位PID仿真程序; 梯形图编写; 通俗易懂; 入门初学者; 西门子编程软件; TIA Portal V15(博图V15); FactoryIO 2.4.0; FactoryIO中文说明书; 场景模型文件; PLC程序(源码)。,"FactoryIO液位控制:梯形图PID仿真程序"

  • 微信自动锁定2.0为保护日常隐私3分钟不操作鼠标和键盘自动锁定微信.rar

    # 微信自动锁定:您的隐私保护神器在当今数字化时代,隐私安全日益重要。微信作为我们日常沟通和信息交流的重要工具,其中的隐私保护不容忽视。为了满足大家对微信隐私保护的需求,我们特别推出了“微信自动锁定”软件。 1. **自动锁定**:这是软件的核心功能。当您在使用微信的过程中,若3分钟内没有任何鼠标和键盘操作,软件会自动锁定微信。这一功能有效防止了他人在您离开电脑时,未经授权访问您的微信,保护您的聊天记录、个人信息等隐私不被泄露。 2. **便捷的托盘操作**:程序启动后,会自动收纳到电脑右下角的托盘中,不占用过多屏幕空间,也不会干扰您的正常工作和使用。当您需要退出程序时,只需右键点击托盘图标,选择“退出”即可,操作简单便捷。 3. **灵活的托盘图标设置**:托盘图标支持两种设置方式。您可以选择指定路径的图片作为托盘图标,按照自己的喜好进行个性化设置;也可以使用base64编码的图标,满足不同用户的多样化需求。

  • 基于Python 的BP神经网络的高频金融时间序列分析毕业设计

    【作品名称】:基于Python 的BP神经网络的高频金融时间序列分析【毕业设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: This project includes three sections. GetData Data crawling. Responsible for crawling and processing the high frequency data of stock transcation in recent years. And the data format would be converted to an appropriate format. predict Core algorithm. Implement the Back Propagation Neural Networks 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

  • PackageKit-gtk3-module-1.1.10-2.el7.centos.x64-86.rpm.tar.gz

    1、文件内容:PackageKit-gtk3-module-1.1.10-2.el7.centos.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/PackageKit-gtk3-module-1.1.10-2.el7.centos.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

  • 三相PWM整流器的双闭环控制与C语言实现的PI控制及SVPWM模块技术解析,三相PWM整流器,采用双闭环控制,用C语言实现PI控制,SVPWM等模块 ,核心关键词:三相PWM整流器;双闭环控制;C语

    三相PWM整流器的双闭环控制与C语言实现的PI控制及SVPWM模块技术解析,三相PWM整流器,采用双闭环控制,用C语言实现PI控制,SVPWM等模块。 ,核心关键词:三相PWM整流器;双闭环控制;C语言实现;PI控制;SVPWM模块;,三相PWM整流器双闭环PI控制与SVPWM模块实现

  • 反激式开关电源仿真研究:电压外环PI控制下12V输出电压及MATLAB建模分析,反激式开关电源,反激仿真电力电子仿真,电压外环PI控制,输入电压18-75V,输出电压12V,输出功率12W,MATLA

    反激式开关电源仿真研究:电压外环PI控制下12V输出电压及MATLAB建模分析,反激式开关电源,反激仿真电力电子仿真,电压外环PI控制,输入电压18-75V,输出电压12V,输出功率12W,MATLAB simulink软件。 ,核心关键词:反激式开关电源; 反激仿真; 电力电子仿真; 电压外环PI控制; 输入电压18-75V; 输出电压12V; 输出功率12W; MATLAB Simulink软件。,基于反激式开关电源的电力电子仿真与电压外环PI控制研究

  • 电赛小车源码 常规C/C++编程

    电赛小车源码 常规C/C++编程 【核心代码】 ├── 2003智能小车(全国大学生电子设计竞赛) │ ├── BrainCar.M51 │ ├── BrainCar.Opt │ ├── BrainCar.Uv2 │ ├── BrainCar.hex │ ├── BrainCar.lnp │ ├── BrainCar.plg │ ├── BrainCar_Opt.Bak │ ├── BrainCar_Uv2.Bak │ ├── Config.h │ ├── Follow.LST │ ├── Follow.OBJ │ ├── Follow.c │ ├── Follow.h │ ├── IOCfg.LST │ ├── IOCfg.OBJ │ ├── IOCfg.c │ ├── LightDTC.LST │ ├── LightDTC.OBJ │ ├── LightDTC.c │ ├── LightDTC.h │ ├── MetalDTC.LST │ ├── MetalDTC.OBJ │ ├── Met

  • alsa-plugins-speex-1.1.6-1.el7.x64-86.rpm.tar.gz

    1、文件内容:alsa-plugins-speex-1.1.6-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/alsa-plugins-speex-1.1.6-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

Global site tag (gtag.js) - Google Analytics