Kotlin Misk Web框架
- 1 添加依赖
- 1.1 build.gradle.kts
- 1.2 settings.gradle.kts
- 1.3 gradle.properties
- 2 请求接口
- 3 程序模块
- 4 主服务类
- 5 测试结果
Misk 是由 Square 公司开发的一个开源的多语言服务器框架,主要用于构建微服务。它主要使用 Kotlin 语言,但也支持 Java。Misk 的设计目标是提供一个现代化、高效、易于使用的框架,用于快速开发和部署微服务。
主要特点和组件 | 解释 |
---|---|
依赖注入 | Misk 使用 Google 的 Guice 库进行依赖注入。这使得代码更加模块化,易于测试和维护。 |
Web 服务支持 | Misk 提供了强大的 Web 服务支持,包括路由、请求处理、响应生成等。它使用注解来定义 API 端点,使得创建 RESTful 服务变得简单,Misk 内置了对 HTTP 和 gRPC 的支持。通过简单的注解,可以快速定义 RESTful API 和 gRPC 服务。 |
数据库支持 | Misk 集成了 JDBC 和各种 ORM 框架,支持多种数据库操作。它还提供了事务管理和连接池管理。 |
配置管理 | Misk 提供了灵活的配置管理系统,支持不同环境(如开发、测试、生产)的配置。 |
健康检查和指标 | Misk 内置了健康检查和指标收集功能,有助于监控和管理服务的运行状态。 |
安全性 | Misk 提供了认证和授权支持,包括 JWT 认证、CORS 配置等。 |
测试支持 | Misk 提供了丰富的测试工具和框架,使得单元测试和集成测试变得容易。 |
异步编程 | Misk 支持 Kotlin 协程,使得异步编程变得更加简单和高效。 |
服务发现和负载均衡 | Misk 提供了服务发现和负载均衡的功能,有助于构建分布式系统。 |
插件系统 | Misk 有一个灵活的插件系统,允许开发者轻松扩展和定制框架的功能。 |
核心组件 | 解释 |
---|---|
MiskWeb | 用于构建 Web 服务和管理控制台的组件。 |
MiskHibernate | 提供与 Hibernate 集成的数据库访问功能。 |
MiskService | 用于定义和管理服务生命周期的组件。 |
MiskSecurity | 提供安全相关的功能,包括认证和授权 |
1 添加依赖
1.1 build.gradle.kts
import org.jetbrains.kotlin.cli.jvm.compiler.findMainClassplugins {kotlin("jvm") version "2.0.0"
}group = "com.xu"
version = "1.0.0"repositories {mavenCentral()
}dependencies {testImplementation(kotlin("test"))implementation("com.squareup.misk:misk:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-actions:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-core:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-inject:2024.06.19.153119-a4bdcea")implementation("com.squareup.misk:misk-service:2024.06.19.153119-a4bdcea")
}tasks.test {useJUnitPlatform()
}kotlin {jvmToolchain(21)
}
1.2 settings.gradle.kts
plugins {id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}rootProject.name = "misk-test"
1.3 gradle.properties
kotlin.code.style=official
2 请求接口
package com.xu.actionimport com.google.inject.Inject
import com.google.inject.Singleton
import misk.web.Get
import misk.web.PathParam
import misk.web.Post
import misk.web.QueryParam
import misk.web.RequestBody
import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.mediatype.MediaTypes@Singleton
class HelloWebAction @Inject constructor() : WebAction {@Get("/hello1/{name}")@ResponseContentType(MediaTypes.APPLICATION_JSON)fun hello1(@PathParam name: String, @QueryParam addr: String): List<String> {return listOf("你好", name, addr)}@Post("/hello2")@ResponseContentType(MediaTypes.APPLICATION_JSON)fun hello2(@RequestBody body: Student): Map<String, Any> {return mapOf("student" to body)}data class Student(val name: String, val addr: String);}
3 程序模块
package com.xuimport com.xu.action.HelloWebAction
import misk.inject.KAbstractModule
import misk.web.WebActionModuleclass HelloWorldModule : KAbstractModule() {override fun configure() {install(WebActionModule.create<HelloWebAction>())}}
4 主服务类
package com.xuimport misk.MiskApplication
import misk.MiskRealServiceModule
import misk.environment.DeploymentModule
import misk.web.MiskWebModule
import misk.web.WebConfig
import wisp.deployment.Deploymentfun main(args: Array<String>) {val webConfig = WebConfig(port = 8080)val deployment = Deployment(name = "HelloWorldService",isProduction = true)MiskApplication(modules = listOf(MiskWebModule(webConfig),HelloWorldModule(),MiskRealServiceModule(),DeploymentModule(deployment))).run(args)
}
5 测试结果