Javalin เป็นเว็บเฟรมเวิร์กที่มีน้ำหนักเบามากสำหรับ Kotlin และ Java ซึ่งรองรับคำขอ WebSockets, HTTP2 และ async เป้าหมายหลักของ Javalin คือความเรียบง่าย ประสบการณ์นักพัฒนาที่ยอดเยี่ยม และความสามารถในการทำงานร่วมกันระดับเฟิร์สคลาสระหว่าง Kotlin และ Java
Javalin เป็นไลบรารีมากกว่าเฟรมเวิร์ก ประเด็นสำคัญบางประการ:
คุณไม่จำเป็นต้องขยายอะไร
ไม่มี @คำอธิบายประกอบ
ไม่มีการสะท้อน
ไม่มีเวทย์มนตร์อื่นใด แค่รหัส
เว็บเพจของโครงการคือ javalin.io (แหล่งที่มาอยู่ที่ javalin/javalin.github.io)
อ่านเอกสารประกอบได้ที่: javalin.io/documentation
สามารถดูข้อมูลสรุปใบอนุญาตได้ที่ TLDR Legal
ประเด็นที่น่าสนใจ
เรามีเซิร์ฟเวอร์ Discord ที่กระตือรือร้นซึ่งคุณสามารถรับความช่วยเหลือได้อย่างรวดเร็ว นอกจากนี้เรายังมี Slack (ใช้งานน้อยกว่ามาก) หากคุณต้องการ
เรายินดีอย่างยิ่งที่จะมีส่วนร่วม คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการมีส่วนร่วมในคำแนะนำของเรา: การมีส่วนร่วม
โปรดพิจารณาสนับสนุนหรือนำแสดงโดย Javalin หากคุณต้องการสนับสนุนโครงการ
<การพึ่งพา>io.javalin จาวาลิน <เวอร์ชัน>6.3.0เวอร์ชัน> การพึ่งพา>
การใช้งาน ("io.javalin:javalin:6.3.0")
นำเข้า io.javalin.Javalin; สวัสดีคลาสสาธารณะ HelloWorld { โมฆะคงที่สาธารณะ main (String [] args) { แอป var = Javalin.create (/ * config * /) .get("/", ctx -> ctx.result("สวัสดีชาวโลก")) .เริ่มต้น(7070); - -
นำเข้า io.javalin.Javalinfun main() { แอป val = Javalin.create(/*config*/) .get("/") { it.result("สวัสดีชาวโลก") } .เริ่มต้น(7070) -
ส่วนนี้ประกอบด้วยตัวอย่างบางส่วน ซึ่งส่วนใหญ่คัดลอกมาจากเอกสารเท่านั้น ตัวอย่างทั้งหมดอยู่ใน Kotlin แต่คุณสามารถค้นหาได้ใน Java ในเอกสารประกอบ (เป็นเพียงการเปลี่ยนแปลงไวยากรณ์)
คุณสามารถค้นหาตัวอย่างเพิ่มเติมได้ในที่เก็บตัวอย่าง javalin
นำเข้า io.javalin.Javalinimport io.javalin.apibuilder.ApiBuilder.*fun main() { val app = Javalin.create { config -> config.useVirtualThreads = จริง config.http.asyncTimeout = 10_000L config.staticFiles.add("/สาธารณะ") config.staticFiles.enableWebjars() config.router.apiBuilder { เส้นทาง ("/ ผู้ใช้") { ได้รับ (UserController::getAll) โพสต์ (UserController::create) เส้นทาง ("/{รหัสผู้ใช้}") { ได้รับ (UserController::getOne) แพทช์ (UserController :: อัพเดต) ลบ(ตัวควบคุมผู้ใช้::ลบ) - ws("/events", userController::webSocketEvents) - - }.เริ่มต้น(7070) -
app.ws("/websocket/{path}") { ws -> ws.onConnect { ctx -> println ("เชื่อมต่อ") } ws.onMessage { ctx -> val user = ctx.message() // แปลงจากสตริง json เป็น object ctx.send(user) // แปลงเป็นสตริง json และส่งกลับ - ws.onClose { ctx -> println("ปิด") } ws.onError { ctx -> println ("ผิดพลาด") } -
app.before("/some-path/*") { ctx -> ... } // ทำงานก่อนคำขอไปยัง /some-path/*app.before { ctx -> ... } // ทำงานก่อนคำขอทั้งหมด .after { ctx -> ... } // ทำงานหลังจากการร้องขอ App.Exceptional (Exception.class) ทั้งหมด { e, ctx -> ... } // ทำงานหากไม่ได้ตรวจจับ Exceptionapp.error (404) { ctx -> .. . } // ทำงานหากสถานะเป็น 404 (หลังจากตัวจัดการอื่นๆ ทั้งหมด)app.wsBefore("/some-path/*") { ws -> ... } // ทำงานก่อนเหตุการณ์ ws บน /some-path/*app.wsBefore { ws -> .. . } // ทำงานก่อน ws eventsapp.wsAfter ทั้งหมด { ws -> ... } // ทำงานหลังจาก ws eventsapp.wsException (Exception.class) ทั้งหมด { e, ctx -> ... } // ทำงานหากไม่ได้รับการยกเว้นใน ส ตัวจัดการ
var todos = arrayOf(...) app.get("/todos") { ctx -> // แมปอาร์เรย์ของ Todos ไปยัง json-string ctx.json(สิ่งที่ต้องทำ) - app.put("/todos") { ctx -> // map request-body (json) ไปยังอาร์เรย์ของ Todos สิ่งที่ต้องทำ = ctx.body<อาร์เรย์<สิ่งที่ต้องทำ>>() ctx.สถานะ(204) -
app.post("/upload") { ctx -> ctx.uploadedFiles("files").forEach { uploadedFile -> FileUtil.streamToFile(uploadedFile.content(), "upload/${uploadedFile.filename()}") - -
Javalin มีระบบปลั๊กอินที่ช่วยให้คุณสามารถเพิ่มฟังก์ชันการทำงานให้กับไลบรารีหลักได้ คุณสามารถดูรายการปลั๊กอินได้ที่นี่
การติดตั้งปลั๊กอินนั้นง่ายพอ ๆ กับการเพิ่มการพึ่งพาให้กับโปรเจ็กต์ของคุณและลงทะเบียนกับ Javalin:
Javalin.create { config -> config.registerPlugin(ปลั๊กอินของฉัน()) -
ปลั๊กอินยอดนิยมบางตัว ได้แก่:
ปลั๊กอิน Javalin OpenAPI ช่วยให้คุณสร้างข้อกำหนด OpenAPI 3.0 สำหรับ API ของคุณ ณ เวลาคอมไพล์
ใส่คำอธิบายประกอบเส้นทางของคุณด้วย @OpenApi
เพื่อสร้างข้อกำหนด:
@OpenApi( summary = "รับผู้ใช้ทั้งหมด", OperationId = "getAllUsers", แท็ก = ["ผู้ใช้"], การตอบสนอง = [OpenApiResponse("200", [OpenApiContent(Array::class)])], เส้นทาง = "/ ผู้ใช้", วิธีการ = [HttpMethod.GET] ) สนุก getAll (ctx: บริบท) { ctx.json(UserService.getAll()) -
การใช้งาน Swagger UI และ ReDoc UI สำหรับการดูข้อกำหนดที่สร้างขึ้นในเบราว์เซอร์ของคุณก็พร้อมใช้งานเช่นกัน
สำหรับข้อมูลเพิ่มเติม โปรดดู Javalin OpenAPI Wiki
ปลั๊กอิน Javalin SSL ช่วยให้คุณสามารถกำหนดค่า SSL สำหรับเซิร์ฟเวอร์ Javalin ของคุณได้อย่างง่ายดาย โดยรองรับรูปแบบที่หลากหลาย เช่น PEM, PKCS12, DER, P7B และ JKS
การเปิดใช้งาน SSL บนพอร์ต 443 นั้นง่ายดายเหมือน:
ปลั๊กอิน val = SSLPlugin { conf -> conf.pemFromPath("/path/to/cert.pem", "/path/to/key.pem") }Javalin.create { javalinConfig -> javalinConfig.plugins.register (ปลั๊กอิน) }.เริ่ม()
โลโก้ | สปอนเซอร์ |
---|---|
@barbarysoftware (50 USD/m) | |
KabCash (50 USD/m) |
เบลค มิเซรานี่ ผู้สร้างซินาตร้า
เพอร์ เวนเดล สำหรับการสร้าง Spark
Christian Rasmussen สำหรับการเป็นคนดี
Per Kristian Kummermo สำหรับการเป็นคนที่ยอดเยี่ยมเช่นกัน