오늘도 더 나은 코드를 작성하였습니까?

Ktor(client) 본문

Ktor/Client

Ktor(client)

hik14 2022. 7. 15. 16:16

 client 객체 생성

- parmeter로 engine 전달.

- parmeter로 전달하지 않는다면, 클라이언트는 빌드 스크립트에 추가된 artifact에 따라 자동으로 엔진을 선택됨.

import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO)

Configure the client(클라이언트 구성하기)

기본구성

- HttpClientConfig 클래스는 클라이언트를 구성하기 위한 기본 클래스

- expectSuccess 속성을 사용하여 응답 유효성 검사를 활성화 가능함

import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO) {
    expectSuccess = true
}

엔진 구성

import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO) {
    engine {
        // Configure an engine
    }
}

 

플러그인

 

- 클라이언트 구성 블록 내부의 install 함수에 플러그인을 전달

- Logging 플러그인을 설치하여 HTTP 호출을 기록 가능하다.

 

Logger 및 Logger level 정의

val client = HttpClient(CIO) {
    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.HEADERS
    }
}

*특정 플러그인에는 모듈/프로젝트에 별도의 종속성이 필요할 수 도 있다.

Use the client

필요한 모든 종속성을 추가하고 클라이언트를 만든 후에는 이를 사용하여 request 보내고  response을 받을 수 있다.

Close the client

HTTP 클라이언트 작업을 마친 후에는 Thread, connection, 코루틴용 CoroutineScope 등의 리소스를 해제해야 합니다.

HttpClient.close 함수를 호출

 

close()

- 새 request 생성을 금지하지만, 현재 활성 request을 종료하지 않습니다.

- 리소스는 모든 클라이언트 요청이 완료된 후에만 해제됨

 

a single request에 대해 HttpClient를 사용해야 하는 경우,  코드 블록을 실행한 후 자동으로 close를 호출하는 use 함수를 이용.

val status = HttpClient().use { client ->
    // ...
}

* HttpClient를 만드는 것은 저렴한 작업이 아니며 여러 요청의 경우 인스턴스를 재사용하는 것이 좋습니다

'Ktor > Client' 카테고리의 다른 글

Ktor Retrying failed requests  (0) 2022.07.19
Ktor User agent  (0) 2022.07.19
Ktor requests  (0) 2022.07.19
ktor(client Engines)  (0) 2022.07.15
Ktor(Creating a client)  (0) 2022.07.13