การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด
กำหนดเส้นทางด้วยพารามิเตอร์พาธและคำค้นหา พร้อมจัดกลุ่มด้วยบล็อก route
การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
พื้นฐานการกำหนดเส้นทางใน Ktor
การกำหนดเส้นทางใน Ktor เป็นปลั๊กอินที่ติดตั้งผ่าน install(Routing) { ... } หรือรูปแบบย่อ routing { ... } กำหนดเส้นทางด้วยฟังก์ชันตามเมธอด HTTP ได้แก่ get, post, put, delete, patch
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}พารามิเตอร์ของเส้นทาง
กำหนดพารามิเตอร์ของเส้นทางด้วย {name} เข้าถึงพารามิเตอร์ผ่าน call.parameters["name"] ค่าเป็น String? เสมอ:
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}ส่วนของเส้นทางที่ไม่บังคับ
ทำให้ส่วนหนึ่งไม่บังคับโดยเติม ?: {name?} หากไม่มีส่วนดังกล่าว call.parameters["name"] จะส่งคืนค่า null
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}การแปลงพารามิเตอร์เป็นประเภท
แปลงพารามิเตอร์ของเส้นทางเป็นค่าตามประเภทโดยใช้ฟังก์ชันส่วนขยายของ Parameters Ktor มีตัวช่วยที่มีมาให้ หรือคุณสามารถเขียนตัวช่วยของคุณเองได้:
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}พารามิเตอร์คำค้นหา
เข้าถึงพารามิเตอร์ในสตริงคำค้นหาผ่าน call.request.queryParameters["key"] หากคีย์เดียวกันมีหลายค่า ให้เข้าถึงผ่าน getAll("key"):
get("/search") {
val q = call.request.queryParameters["q"] ?: ""
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
call.respondText("Search: $q, page $page")
}การจัดกลุ่มเส้นทาง
จัดกลุ่มเส้นทางที่เกี่ยวข้องไว้ใต้คำนำหน้าร่วมโดยใช้ route("/prefix") { ... } วิธีนี้ช่วยลดการเขียนซ้ำและทำให้แผนผังการกำหนดเส้นทางอ่านเข้าใจง่าย:
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}การจัดระเบียบเส้นทางในฟังก์ชัน
แยกกลุ่มเส้นทางออกเป็นฟังก์ชันส่วนขยายของ Route เพื่อให้การกำหนดค่าเส้นทางเป็นโมดูล:
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }การจัดการเนื้อหาคำขอ
รับเนื้อหาคำขอเป็นข้อความ ไบต์ หรือออบเจ็กต์ที่แปลงกลับแล้ว (ต้องใช้ปลั๊กอิน ContentNegotiation) ใช้ call.receive เพื่อแปลงข้อมูลเป็นประเภทที่กำหนด:
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}การตอบกลับด้วยรหัสสถานะ
ใช้ call.respond(status, body) เพื่อควบคุมได้อย่างเต็มที่ หรือใช้เมธอดอำนวยความสะดวก call.respondText(), call.respondFile(), call.respond(HttpStatusCode.NotFound):
get("/users/{id}") {
val user = userRepo.find(call.parameters["id"])
if (user == null) call.respond(HttpStatusCode.NotFound)
else call.respond(user)
}เส้นทางแบบไวลด์การ์ดและเทลการ์ด
ใช้ * สำหรับส่วนเส้นทางแบบไวลด์การ์ดหนึ่งส่วน และใช้ {...} (เทลการ์ด) เพื่อจับส่วนที่เหลือของเส้นทางเป็นพารามิเตอร์เดียว:
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}ลำดับความสำคัญของเส้นทาง
Ktor ประเมินเส้นทางตามลำดับที่ประกาศ ควรประกาศเส้นทางที่เฉพาะเจาะจงกว่าไว้ก่อนเส้นทางแบบไวลด์การ์ด เมื่อมีเส้นทางที่ตรงกันสองเส้นทาง ระบบจะเลือกเส้นทางแรกที่ตรงกัน
ตรวจสอบความเข้าใจ
คุณจะจัดกลุ่มหลายเส้นทางไว้ใต้คำนำหน้า URL ร่วมกันใน Ktor ได้อย่างไร
ทบทวน: การกำหนดเส้นทางและพารามิเตอร์ตามประเภท
ประเด็นสำคัญ:
- กำหนดเส้นทางด้วย
get,postและอื่น ๆ ภายในrouting { } - พารามิเตอร์ของเส้นทาง:
{name}— เข้าถึงผ่านcall.parameters["name"] - พารามิเตอร์คำค้นหา:
call.request.queryParameters["key"] - จัดกลุ่มเส้นทางด้วย
route("/prefix") { }และแยกเป็นฟังก์ชันส่วนขยายของRoute - รับเนื้อหาตามประเภทด้วย
call.receive(ต้องใช้ ContentNegotiation)()
เรียนรู้ Kotlin ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด”
กำหนดเส้นทางด้วยพารามิเตอร์พาธและคำค้นหา พร้อมจัดกลุ่มด้วยบล็อก route คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่าโปรเจกต์ Ktor: embeddedServer และโมดูลแอปพลิเคชัน
- การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด
- การเจรจาเนื้อหาและ kotlinx.serialization
- ปลั๊กอินการยืนยันตัวตน: JWT และ Session