Ktor를 사용하여 첫 번째 HTTP API 작성!

소개



Ktor는 다양한 서버(및 클라이언트 측) 애플리케이션을 만드는 데 사용할 수 있는 Kotlin 프레임워크입니다.

더 이상 지체하지 않고 응용 프로그램 작성을 시작하겠습니다.

신속하게 시작하는 데 필요한 모든 종속성이 있는 Spring 부트 프로젝트를 생성하는 Spingboot initializer과 같이 Ktor 프로젝트 생성기를 사용할 수 있습니다.

방문 Ktor Project Generator . Gradle 프로젝트, Jetty 서버 및 Ktor 1.5.0을 선택합니다. 그런 다음 요구 사항에 따라 그룹, 이름 및 버전을 업데이트했습니다. 지금은 서버 및 클라이언트 섹션의 오른쪽에서 아무 것도 선택하지 않겠습니다. 빌드를 클릭합니다. "Application.kt"파일에서 코드 작성을 시작할 수 있는 프로젝트의 기본 구조를 포함하는 아카이브를 생성합니다.
아카이브를 추출하십시오. IntelliJ Idea 또는 Kotlin 개발에 사용 중인 다른 IDE에서 프로젝트를 엽니다. 이제 "Application.kt"파일에서 코드 작성으로 바로 이동할 수 있습니다.

아래와 같이 "Application.kt"를 업데이트합니다.

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.routing.*

fun main(args: Array<String>): Unit = io.ktor.server.jetty.EngineMain.main(args)

@Suppress("unused")
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    routing {
        get("/") {
            call.respondText("Hello, world!")
        }
    }
}


이제 첫 번째 API를 실행할 준비가 되었습니다. ./gradlew 명령을 사용하여 애플리케이션을 실행하거나 IntelliJ에서 직접 실행할 수 있습니다. (기본 기능의 왼쪽에 녹색 삼각형 아이콘이 표시됩니다.)
브라우저에서 HTTP://localhost:8080을 누르십시오. 아래 이미지와 같이 출력이 표시되어야 합니다.


심해 잠수


엔진



기본 기능 내에서 서버 엔진을 지정하고 있습니다.

fun main(args: Array<String>): Unit = io.ktor.server.jetty.EngineMain.main(args)


Ktor 서버 응용 프로그램을 실행하려면 먼저 서버를 만들고 구성해야 합니다. EngineMain은 서버를 실행하기 위한 엔진을 나타냅니다. Ktor는 다음 엔진을 지원합니다.
  • 네티
  • 제티
  • 톰캣
  • CIO(코루틴 기반 I/O)
    Ktor는 애플리케이션 로직 테스트를 위한 특수 엔진 유형인 TestEngine도 제공합니다.

  • "resources"폴더 아래의 "application.conf"파일에서 다양한 엔진별 옵션, 호스트 및 포트 값 등과 같은 다양한 서버 속성을 정의할 수 있습니다.

    라우팅



    Ktor 애플리케이션은 하나 이상의 모듈로 구성됩니다. 모듈은 서버 파이프라인 구성, 기능 설치, 경로 등록, 요청 처리 등을 담당하는 Application 클래스를 수신하는 사용자 정의 함수에 불과합니다.

    위의 예제에서 모듈은 Application 클래스의 확장 메서드입니다.
    fun Application.module(testing: Boolean = false)


    라우팅은 들어오는 요청을 처리할 수 있도록 허용하는 것입니다. 우리의 경우 "/"와 같은 요청이 이루어지면 Ktor의 라우팅 메커니즘을 통해 이 요청을 처리하는 방법을 정의할 수 있습니다.
    모든 경로는 세 가지 매개변수를 사용합니다.
  • URL 패턴
  • Verb,(GET, POST, PUT, DELETE, HEAD, OPTION 또는 PATCH)
  • 처리기 - 요청 처리에 대한 액세스 권한

  • 아래와 같이 여러 경로를 정의할 수 있습니다.

    routing {
        get("/") {
    
        }
        post("/user") {
    
        }
        get("/user/{id}") {
    
        }
    }
    


    Cover Photo by Marc Reichelt

    좋은 웹페이지 즐겨찾기