Slide 16
Slide 16 text
Connect-Ktor (https://github.com/ichizero/connect-ktor)
- Ktor Content Negotiation Plugin向けのProtobuf Serializerを提供
- Accept / Content-Type Headersを元にRequest / Responseを処理
- ProtobufからKtorのRouting定義を⽣成するProtoc Pluginを提供
Connect-Ktor
public interface ElizaServiceHandler {
public suspend fun say(request: SayRequest, call: ApplicationCall):
ResponseMessage
public object Procedures {
@Resource("/connectrpc.eliza.v1.ElizaService/Say")
public class Say
}
}
public fun Route.elizaService(handler: ElizaServiceHandler) {
post(handle(handler::say))
}
object ElizaServiceHandlerImpl : ElizaServiceHandler {
override suspend fun say(request: SayRequest, call: ApplicationCall):
ResponseMessage = ResponseMessage.Success(
sayResponse { sentence = request.sentence }, emptyMap(), emptyMap())
}
fun main() {
embeddedServer(CIO, port = 8080) {
install(Resources)
routing {
install(ContentNegotiation) { connectJson() }
elizaService(ElizaServiceHandlerImpl)
}
}.start(wait = false)
}
⽣成コード 実装コード