Cuando intento generar stubs del lado del servidor para ktor desde openapi, la salida para mí no parece muy útil.
Configuré un proyecto de ejemplo en Github , donde se puede revisar la configuración. Como necesito usar maven en mi proyecto real, también lo usé aquí, pero supongo que esto no debería marcar la diferencia con otros métodos de generación.
La parte relevante del POM es esta:
<build> ... <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>resources</id> <phase>compile</phase> <goals><goal>copy-resources</goal></goals> <configuration> <outputDirectory>${project.build.directory}/classes</outputDirectory> <resources> <resource> <directory>${project.basedir}/resources</directory> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>Lo que se generará es lo siguiente:
Paths.kt que contiene las rutas a mis rutas en formato ktor-ubicacionesio.ktor.routing.Route Viniendo de SpringBoot y Swagger, estoy un poco confundido, ya que este conjunto de archivos no es realmente útil si desea crear una aplicación real que implemente una lógica comercial real. Hubiera esperado alguna implementación predeterminada que contuviera métodos únicos que solo necesito implementar/anular. Me doy cuenta de que ktor no tiene DI incorporado, por lo que también esperaría tener que extender el código auxiliar de routing en mi aplicación de alguna manera.
Sin embargo, con este conjunto de código generado, realmente solo puedo usar el modelo de datos y el objeto Paths.kt . Tendré mi propia aplicación y la implementación predeterminada que no puedo anular, pero necesito reescribir completamente yo mismo.
Entonces, mi pregunta es cómo configurar una aplicación ktor adecuada que implemente las especificaciones de openapi. ¿Me pierdo algo o realmente solo obtengo el modelo y Paths.kt para trabajar?
Editar
Para mayor claridad: especialmente con estas partes de mi aplicación, no estoy feliz de no tener soporte de las herramientas:
fun Application.module(testing: Boolean = false) { // other setup routing { // some other interfaces I may have FooApiImpl() } } /** * This Api Implementation has to be written completely manually. No help from the generated Code... */ @KtorExperimentalLocationsAPI fun Route.FooApiImpl() { get<Paths.getAllFoos> { call.respond(listOf( Foo( id = -1, bar = "hello"), Foo( id = -2, bar = "world") )) } // the path gets named after the first method, which is weird in my eyes. post<Paths.getAllFoos> { val foo = call.receive<Foo>() // fooService.save(foo) call.respond(foo) } delete<Paths.deleteFooById> { path -> val id = path.id // fooService.deleteById(id) call.respond(HttpStatusCode.NoContent) } }