阅读更多
引用
原文: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 ...

  • tensorflow-2.9.2-cp39-cp39-win-amd64.whl

    python爬虫案例

  • 2023年下半年计算机等级考试-公共基础-WPS-PS.zip

    2023年下半年计算机等级一级考试Photoshop考点梳理 2023年下半年计算机等级一级考试WPS office考点汇总 2023年下半年计算机二级考试公共基础知识科目考点汇总 根据实际考试情况进行的总结。

  • Introduction to Data Science Data With R 英文

    Introduction to Data Science Data Analysis and Prediction Algorithms with R 英文原版,完整带目录,非常好的数据分析资料,有基于R的完整数据分析过程

  • 数电实验三:74LS151逻辑功能测试、74LS153逻辑功能测试、74LS153全加器、三输入多数表决电路

    数电实验三:74LS151逻辑功能测试、74LS153逻辑功能测试、74LS153全加器、三输入多数表决电路

  • 农业机械维修记录(表式).doc

    农业机械维修记录(表式).doc

  • go语言优质学习资源和工具与案列应用场景.txt

    go语言优质学习资源和工具与案列应用场景.txt

  • 网络攻防课程seed-labs实验-Spectre_Attack.zip

    网络攻防课程seed-labs实验-Spectre_Attack.zip

  • GameAssistant_300200000_0_ 2.exe

    GameAssistant_300200000_0_ 2.exe

  • 电商小程序前端模板下载

    电商小程序前端模板下载。

  • MySQL开发案列优质学习资料资源工具与案列应用场景开发文档教程资料.txt

    MySQL开发案列优质学习资料资源工具与案列应用场景开发文档教程资料.txt

  • 基于图像处理技术的蛋鸡采食行为研究源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

  • 2024海外营销日历.zip

    2024海外营销日历.zip

Global site tag (gtag.js) - Google Analytics