All Downloads are FREE. Search and download functionalities are using the official Maven repository.

notion.api.v1.http.NotionHttpClient.kt Maven / Gradle / Ivy

package notion.api.v1.http

import java.io.Closeable
import java.net.URLEncoder
import notion.api.v1.logging.NotionLogger

interface NotionHttpClient : AutoCloseable, Closeable {

    fun get(
        logger: NotionLogger,
        url: String,
        query: Map = emptyMap(),
        headers: Map,
    ): NotionHttpResponse

    fun postTextBody(
        logger: NotionLogger,
        url: String,
        query: Map = emptyMap(),
        body: String,
        headers: Map
    ): NotionHttpResponse

    fun patchTextBody(
        logger: NotionLogger,
        url: String,
        query: Map = emptyMap(),
        body: String,
        headers: Map
    ): NotionHttpResponse

    override fun close() {}

    // ------------------------------

    fun urlEncode(value: String): String = URLEncoder.encode(value, "UTF-8")

    fun buildQueryString(query: Map) =
        query
            .map { "${urlEncode(it.key)}=${urlEncode(it.value)}" }
            .joinToString(prefix = "?", separator = "&")

    fun buildFullUrl(url: String, q: String) = url + if (q != "?") q else ""

    fun debugLogStart(
        logger: NotionLogger,
        method: String,
        fullUrl: String,
        body: String?,
    ) {
        if (logger.isDebugEnabled()) {
            val b = if (body == null || body.isEmpty()) "" else "body   $body\n"
            logger.debug("""Sending a request:
$method $fullUrl
$b
""".trimIndent().trimMargin())
        }
    }

    fun debugLogSuccess(logger: NotionLogger, response: NotionHttpResponse) {
        if (logger.isDebugEnabled()) {
            logger.debug(
                """Received a response:
status  ${response.status}
body    ${response.body}
"""
                    .trimIndent()
                    .trimMargin())
        }
    }

    fun debugLogFailure(logger: NotionLogger, e: Exception) {
        logger.warn("Failed to disconnect from Notion: ${e.message}", e)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy