Kotlin Academy · บทเรียน

การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด

กำหนดเส้นทางด้วยพารามิเตอร์พาธและคำค้นหา พร้อมจัดกลุ่มด้วยบล็อก route

บทเรียน 2 จาก 413 ขั้นตอน

การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่าโปรเจกต์ Ktor: embeddedServer และโมดูลแอปพลิเคชัน
  2. การกำหนดเส้นทางและพารามิเตอร์ที่ระบุชนิด
  3. การเจรจาเนื้อหาและ kotlinx.serialization
  4. ปลั๊กอินการยืนยันตัวตน: JWT และ Session
← กลับไปที่ Kotlin Academy