Pular para o conteúdo
Skillpedia
Código em geral280 mil · #70

kotlin-ktor-patterns

Faz seu agente criar servidores Ktor seguindo padrões recomendados. Ajuda na configuração de rotas, autenticação, injeção de dependência e testes.

O que ela faz

Este código ajuda a criar servidores web usando a linguagem Kotlin. Ele organiza as diferentes partes do servidor, como as rotas (os caminhos que os usuários acessam), como os dados são enviados e recebidos, e como proteger o acesso.

Quando usar

  • ✓Quando você está começando a construir um site ou aplicativo web com Kotlin.
  • ✓Ao definir quais endereços (URLs) o seu servidor irá responder.
  • ✓Quando precisar configurar quem pode acessar certas partes do seu servidor.

Exemplo do que pedir para a IA

“Como posso configurar meu servidor Ktor para aceitar dados em formato JSON?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/kotlin-ktor-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/kotlin-ktor-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele usa um conjunto de 'receitas' (padrões) para organizar o código do servidor. Essas receitas mostram como configurar as rotas, como lidar com a segurança e como garantir que os dados sejam formatados corretamente.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill kotlin-ktor-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/kotlin-ktor-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões do Ktor Server

Padrões abrangentes do Ktor para construir servidores HTTP robustos e de fácil manutenção com corrotinas Kotlin.

Quando Ativar

  • Construindo servidores HTTP Ktor
  • Configurando plugins Ktor (Auth, CORS, ContentNegotiation, StatusPages)
  • Implementando APIs REST com Ktor
  • Configurando injeção de dependência com Koin
  • Escrevendo testes de integração Ktor com testApplication
  • Trabalhando com WebSockets no Ktor

Estrutura da Aplicação

Layout Padrão do Projeto Ktor

src/main/kotlin/
├── com/example/
│   ├── Application.kt           # Entry point, module configuration
│   ├── plugins/
│   │   ├── Routing.kt           # Route definitions
│   │   ├── Serialization.kt     # Content negotiation setup
│   │   ├── Authentication.kt    # Auth configuration
│   │   ├── StatusPages.kt       # Error handling
│   │   └── CORS.kt              # CORS configuration
│   ├── routes/
│   │   ├── UserRoutes.kt        # /users endpoints
│   │   ├── AuthRoutes.kt        # /auth endpoints
│   │   └── HealthRoutes.kt      # /health endpoints
│   ├── models/
│   │   ├── User.kt              # Domain models
│   │   └── ApiResponse.kt       # Response envelopes
│   ├── services/
│   │   ├── UserService.kt       # Business logic
│   │   └── AuthService.kt       # Auth logic
│   ├── repositories/
│   │   ├── UserRepository.kt    # Data access interface
│   │   └── ExposedUserRepository.kt
│   └── di/
│       └── AppModule.kt         # Koin modules
src/test/kotlin/
├── com/example/
│   ├── routes/
│   │   └── UserRoutesTest.kt
│   └── services/
│       └── UserServiceTest.kt

Ponto de Entrada da Aplicação

// Application.kt
fun main() {
    embeddedServer(Netty, port = 8080, module = Application::module).start(wait = true)
}

fun Application.module() {
    configureSerialization()
    configureAuthentication()
    configureStatusPages()
    configureCORS()
    configureDI()
    configureRouting()
}

DSL de Roteamento

Rotas Básicas

// plugins/Routing.kt
fun Application.configureRouting() {
    routing {
        userRoutes()
        authRoutes()
        healthRoutes()
    }
}

// routes/UserRoutes.kt
fun Route.userRoutes() {
    val userService by inject<UserService>()

    route("/users") {
        get {
            val users = userService.getAll()
            call.respond(users)
        }

        get("/{id}") {
            val id = call.parameters["id"]
                ?: return@get call.respond(HttpStatusCode.BadRequest, "Missing id")
            val user = userService.getById(id)
                ?: return@get call.respond(HttpStatusCode.NotFound)
            call.respond(user)
        }

        post {
            val request = call.receive<CreateUserRequest>()
            val user = userService.create(request)
            call.respond(HttpStatusCode.Created, user)
        }

        put("/{id}") {
            val id = call.parameters["id"]
                ?: return@put call.respond(HttpStatusCode.BadRequest, "Missing id")
            val request = call.receive<UpdateUserRequest>()
            val user = userService.update(id, request)
                ?: return@put call.respond(HttpStatusCode.NotFound)
            call.respond(user)
        }

        delete("/{id}") {
            val id = call.parameters["id"]
                ?: return@delete call.respond(HttpStatusCode.BadRequest, "Missing id")
            val deleted = userService.delete(id)
            if (deleted) call.respond(HttpStatusCode.NoContent)
            else call.respond(HttpStatusCode.NotFound)
        }
    }
}

Organização de Rotas com Rotas Autenticadas

fun Route.userRoutes() {
    route("/users") {
        // Public routes
        get { /* list users */ }
        get("/{id}") { /* get user */ }

        // Protected routes
        authenticate("jwt") {
            post { /* create user - requires auth */ }
            put("/{id}") { /* update user - requires auth */ }
            delete("/{id}") { /* delete user - requires auth */ }
        }
    }
}

Negociação e Serialização de Conteúdo

Configuração do kotlinx.serialization

// plugins/Serialization.kt
fun Application.configureSerialization() {
    install(ContentNegotiation) {
        json(Json {
            prettyPrint = true
            isLenient = false
            ignoreUnknownKeys = true
            encodeDefaults = true
            explicitNulls = false
        })
    }
}

Modelos Serializáveis

@Serializable

…
Perguntas frequentes

O que é uma 'rota'?

Uma rota é como um endereço específico no seu servidor web. Por exemplo, '/usuarios' pode ser uma rota para ver a lista de usuários.

O que significa 'autenticação'?

Autenticação é o processo de verificar se um usuário é quem ele diz ser, geralmente pedindo um nome de usuário e senha ou um token.

O que é 'injeção de dependência' (DI)?

É uma forma de organizar o código onde as partes do programa recebem as outras partes de que precisam, em vez de criá-las elas mesmas. Isso torna o código mais fácil de gerenciar.

Detalhes

Descrição original do autor

Ktor server patterns including routing DSL, plugins, authentication, Koin DI, kotlinx.serialization, WebSockets, and testApplication testing. Use when building a Ktor server — routing, plugins, auth, DI, serialization, or tests.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#70
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas