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

  • 天然气汽车供气系统减压装置毕业设计(cad+设计方案).zip

    天然气汽车供气系统减压装置毕业设计(cad+设计方案)

  • PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书)

    PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书)

  • NumPy 的用途是什么

    NumPy 的用途是什么

  • 毕业设计 基于javaweb的在线答题平台

    毕业设计 基于javaweb的在线答题平台

  • 基于MATLAB的pca人脸识别.zip

    基于MATLAB的pca人脸识别.zip

  • 课设毕设基于SSM的信息类课程教学知识管理系统LW+源码可运行.zip

    课设毕设基于SSM的系统源码可运行

  • JAVAWML信息查询与后端信息发布系统实现-WML信息查询设计(源代码+LW).zip

    JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+LW)

  • 毕业设计[整站程序]情感家园站 v3.0 For 个人版_qgweb30fp.zip

    毕业设计[整站程序]情感家园站 v3.0 For 个人版_qgweb30fp.zip

  • 熊猫脚本助手V1.8.zip

    可以自动刷课,执行重复的脚本工作,内有详细操作教程。支持WIN7---WIN10系统。

  • Java项目之实验室计算机故障报修系统(源码)

    Java项目之实验室计算机故障报修系统(源码) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9

  • 使用hapi框架搭建 基于协同过滤的美食推荐系统——后台.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

  • JAVAWEB校园二手平台项目.zip

    JAVAWEB校园二手平台项目,基本功能包括:个人信息、商品管理;交易商品板块管理等。本系统结构如下: (1)本月推荐交易板块: 电脑及配件:实现对该类商品的查询、用户留言功能 通讯器材:实现对该类商品的查询、用户留言功能 视听设备:实现对该类商品的查询、用户留言功能 书籍报刊:实现对该类商品的查询、用户留言功能 生活服务:实现对该类商品的查询、用户留言功能 房屋信息:实现对该类商品的查询、用户留言功能 交通工具:实现对该类商品的查询、用户留言功能 其他商品:实现对该类商品的查询、用户留言功能 (2)载入个人用户: 用户登陆 用户注册 (3)个人平台: 信息管理:实现对商品的删除、修改、查询功能 添加二手信息:实现对新商品的添加 修改个人资料:实现对用户个人信息的修改 注销

Global site tag (gtag.js) - Google Analytics