隨著微服務和輕量級REST API的日益流行,我們目睹了Java的另一個趨勢:Java微框架的崛起。Javalin, Micronaut, Spark 和其他很多東西讓構建REST api變得輕而易舉。在本文中,我將研究這個令人興奮的領域,並分享我對它們使用的看法。
什麼是微服務框架?
微框架是一種極簡主義的web應用程序框架。與傳統的大型應用程序框架不同的是:
關注開發的簡單性和速度
通常小得多的代碼庫
缺乏一些高級特性,如模板引擎、高級安全特性等。
它不是一個科學的定義和一些框架。例如,在兩者的邊界上,它是輕量級的,比我們說的Spring要小得多,但是在另一方面,它是很好的特色和非平凡的。
值得補充的是,並不是Java發明的微框架。早期的例子之一是來自Ruby(2007)的Sinatra,它激發了相當多的Java微框架。我相信有些讀者會熟悉甚至更早的例子-如果你是,請在評論區給我留言!
為什麼微框架越來越流行?
首先,微框架還不是主流。這可能很快就會改變,特別是隨著對服務器架構的興趣的快速增長。Serverless真正受益於小型和輕量級部署—如果您希望在這種上下文中使用Java,那麼微框架似乎是一個很好的選擇。
另一個推動其流行的因素是容器(Docker)、容器管理系統(Kubernetes)以及API網關等模式的日益採用。突然間,服務不再需要像以前那樣處理許多問題。
如果微框架本身不容易使用,那麼這一切都無關緊要。新項目令人驚歎。我是企業Spring Boot的忠實擁護者,但我不能否認Javalin的優雅。難以置信的是,今天的微框架創建者僅用幾千行代碼就能完成的事情!
微框架之旅
說得夠多了,讓我們看看我最喜歡的項目,看看它們有多簡單。
Javalin
一個用於Java和Kotlin的簡單web框架。
這是我第一次接觸“現代”Java微框架。Javalin是在Kotlin編寫的,它支持Java和Kotlin。如果您想編寫一個漂亮的REST API,那麼Javalin是一種樂趣。
Javalin正在積極開發中,每隔幾周就會發布新版本。
Javalin Hello World:
import io.javalin.Javalin;
public class HelloWorld {
public static void main(String[] args) {
Javalin app = Javalin.start(7000);
app.get("/", ctx -> ctx.result("Hello World"));
}
}
Javalin官網:https://javalin.io/
Spark Java
Spark -在Kotlin和Java 8中創建web應用程序的微型框架,只需最少的努力。
早在2011年Java就採用了微框架。Spark非常小,重點突出,可能是這裡提到的框架中最常用的。
Spark正在積極開發,每隔幾個月就會發布bug修復和維護。新功能的添加頻率較低。
Spark Hello World:
import static spark.Spark.*;
public class HelloWorld {
public static void main(String[] args) {
get("/hello", (req, res) -> "Hello World");
}
}
官網:http://sparkjava.com/
Micronaut
Micronaut用於構建模塊化、易於測試的微服務應用程序的現代、基於jvm的全棧框架。
有了Micronaut,我們就離屏障越來越近了被認為是微框架的東西和不被認為是微框架的東西。這個框架非常簡單,但是它比大多數競爭對手都多。我認為它是一種非常精簡版的Spring Boot。
Micronaut的偉大之處在於他們對雲的關注。在AWS上工作並使編寫serverless應用程序變得很容易,這是他們優先考慮的問題。
1.0.0版本的第一個里程碑版本是在2018年5月30日發佈的,所以我們還處在早期階段。我認為Micronaut很有可能成為下一個大事件,所以關注一下這個!
Micronaut Hello World:
import io.micronaut.runtime.Micronaut;
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/hello")
public class HelloController {
@Get("/")
public String index() {
return "Hello World";
}
}
官網地址:http://micronaut.io/
Ktor
易於使用,有趣和異步。
不是Java,而是Kotlin微框架。Ktor是由JetBrains公司贊助和開發的,JetBrains是Kotlin的創造者,它致力於使開發變得簡單和有趣。我還沒有機會測試它,但是基於Kotlin愛好者和JetBrains的支持,值得一提。
Ktor還沒有發佈1.0.0版本,但應該是在今年的某個時候。
Ktor Hello World:
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
fun main(args: Array
val server = embeddedServer(Netty, port = 8080) {
routing {
get("/") {
call.respondText("Hello World!", ContentType.Text.Plain)
}
get("/demo") {
call.respondText("HELLO WORLD!")
}
}
}
server.start(wait = true)
}
官網:http://ktor.io/
其他值得注意的服務網框架
很難對所有Java微框架進行概述。以下是我沒有進一步探究的一些問題,但仍然可以進行研究和考慮:
Ratpack—Ratpack是一組用於構建可伸縮HTTP應用程序的Java庫。它是一個精幹而強大的基礎,而不是一個包羅萬象的框架。
Jooby -可伸縮、快速、模塊化的Java微web框架。
Akka HTTP——Akka HTTP模塊在Akka -actor和Akka -stream之上實現完整的服務器和客戶端HTTP棧。它不是web框架,而是提供和使用基於http的服務的更通用的工具包。
Dropwizard是一個用於開發操作系統友好、高性能、基於rest的web服務的Java框架。
Jodd - Jodd是一組微型框架和開發人員友好的工具和實用工具。簡單的代碼。小尺寸。良好的表現。無論什麼。使用你喜歡什麼。
Armeria -是一個開源的異步HTTP/2 RPC/REST客戶端/服務器庫,構建在Java 8、Netty、Thrift和gRPC之上。
Ninja - Ninja是一個完整的Java web框架。堅如磐石,速度快,效率高。
Pippo——它是一個開放源碼(Apache License)的Java微型web框架,具有最小的依賴性和快速的學習曲線。
Rapidoid——Rapidoid是一個非常快速的HTTP服務器和現代Java web框架/應用程序容器,非常關注高生產率和高性能。
在這個列表之外,我建議您查看Ratpack、Jooby和Dropwizard。特別是前兩個框架與微框架哲學非常緊密地聯繫在一起。
我需要的不僅僅是一個微框架
如果你需要一些輕量級,但功能齊全的東西,我可以推薦兩個主要的選擇:
Spring Boot - Spring Boot使創建基於生產級的獨立的Spring應用程序變得容易,您可以“直接運行”這些應用程序。
Vert.x - Eclipse綠色。x是在JVM上構建反應性應用程序的工具包。
總結
使用微框架工作既有趣又富有成效。有時,我們很容易總是選擇Spring Boot,卻忘記了Java和Kotlin的創新正在發生。我對Micronaut和Javalin以及它們可能影響未來JVM開發的方式感到特別興奮。
終極雲支持和終極簡單真的吸引我。
如果我錯過了您最喜歡的框架(或者在我的評論中沒有給出公正的評價),請在評論區給我留言。
閱讀更多 程序你好 的文章