Skip to content

Latest commit

 

History

History
106 lines (90 loc) · 2.72 KB

README.md

File metadata and controls

106 lines (90 loc) · 2.72 KB

Ktor Swagger-UI

This library provides a Ktor plugin to document routes, generate an OpenApi Specification and serve a Swagger UI. It is meant to be minimally invasive, meaning it can be plugged into existing application without requiring immediate changes to the code. Routes can then be gradually enhanced with documentation.

Installation

Step 1. Add the JitPack repository

   repositories {
        maven { url "https://jitpack.io" }
   }

Step 2. Add the dependency

dependencies {
    implementation 'io.github.smiley4:ktor-swagger-ui:<VERSION>'
}

Example

Full examples can be found in src/test/kotlin/io/github/smiley4/swaggerui/examples.

install(SwaggerUI) {
    swagger {
        swaggerUrl = "swagger-ui"
        forwardRoot = true
    }
    info {
        title = "Example API"
        version = "latest"
        description = "Example API for testing and demonstration purposes."
    }
    server {
        url = "http://localhost:8080"
        description = "Development Server"
    }
}
get("hello", {
    description = "Hello World Endpoint."
    response {
        HttpStatusCode.OK to {
            description = "Successful Request"
            body(String::class.java) { description = "the response" }
        }
        HttpStatusCode.InternalServerError to {
            description = "Something unexpected happened"
        }
    }
}) {
    call.respondText("Hello World!")
}
post("math/{operation}", {
    tags = listOf("test")
    description = "Performs the given operation on the given values and returns the result"
    request {
        pathParameter("operation", String::class.java) {
            description = "the math operation to perform. Either 'add' or 'sub'"
        }
        body(MathRequest::class.java)
    }
    response {
        HttpStatusCode.OK to {
            description = "The operation was successful"
            body(MathResult::class.java) {
                description = "The result of the operation"
            }
        }
        HttpStatusCode.BadRequest to {
            description = "An invalid operation was provided"
        }
    }
}) {
    val operation = call.parameters["operation"]!!
    call.receive<MathRequest>().let { request ->
        when (operation) {
            "add" -> call.respond(HttpStatusCode.OK, MathResult(request.a + request.b))
            "sub" -> call.respond(HttpStatusCode.OK, MathResult(request.a - request.b))
            else -> call.respond(HttpStatusCode.BadRequest, Unit)
        }
    }
}

data class MathRequest(
    val a: Int,
    val b: Int
)

data class MathResult(
    val value: Int
)