Get it on Google Play

Creando servicios Rest con Kotlin y Spring

05-09-2017
 

Kotlin es uno de esos lenguajes que se están poniendo de moda. Desarrollado Por JetBrains, ahora mismo es lenguaje oficial de Google y tiene muy buena pinta.

El principal punto fuerte de Kotlin es que es un lenguaje moderno, que incorpora gran cantidad de funcionalidades que lo hacen muy atractivo. Por ejemplo, soporta interpolación de variables dentro de texto, inferencia de tipos o distinción entre tipos nullables y no-nullables entre otras muchas cosas(Esto le molará a mucha gente! No hace falta poner punto y coma al final 😀 ).

Vamos a ver como creamos un servicio Rest con Kotlin utilizando el Framework Spring. Pero antes de nada decir que he creado un proyecto en Git https://github.com/acoronadoc/kotlin-spring-sample(Para los que os quejais de falta de código 😀 ):

Creación del proyecto Kotlin con Gradle y Eclipse

Lo primero será abrir Eclipse y crear un nuevo proyecto Gradle:

Kotlin: Create Eclipse Gradle project

Kotlin: Create Eclipse Gradle project

Al proyecto podemos llamarle ‘Kotlin'(Si, no me he matado mucho…).

Configuración de Gradle

Ahora copiamos lo siguiente a nuestro fichero ‘build.gradle’.

buildscript {
    ext.kotlin_version = '1.1.4-3'
    ext.spring_boot_version = '1.5.4.RELEASE'
    repositories {
        jcenter()
    	}
    	
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    	classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
    	}
	}

apply plugin: 'kotlin'
apply plugin: "kotlin-spring"
apply plugin: 'org.springframework.boot'

jar {
    baseName = 'rest-con-kotlin'
    version = '0.1.0'
	}

repositories {
    jcenter()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'org.springframework.boot:spring-boot-starter-web'
    testCompile('org.springframework.boot:spring-boot-starter-test')
	}

Esto no es obligatorio, pero lo mejor será que hagamos click con el botón derecho al proyecto ‘Kotlin’ => “Gradle” =>”Refresh Gradle Project”. Esto nos descargará las dependencias y configurará el proyecto(Puede tardar varios minutos):

Kotlin: Eclipse refresh gradle project

Kotlin: Eclipse refresh gradle project

Creando nuestra primera classe de modelo

Kotlin: Eclipse project folders

Kotlin: Eclipse project folders

Dentro de la carpeta ‘src’ crearemos una nueva carpeta llamada ‘kotlin'(Justo al lado de la carpeta ‘java’) donde pondremos nuestro código escrito en el flamante Kotlin.

Dentro de esta carpeta crearemos nuestro nuevo package, en mi caso ‘com.lostsys.kotlin.spring’.

Dentro del package crearemos la primera classe ‘Coche.kt’:

package com.lostsys.kotlin.spring

data class Coche(
	val matricula: String, 
	val marca: String,
	val modelo: String,
	val color: String
	)

En Kotlin no tenemos que definir getters/setters porque el propio lenguaje, en el momento de declarar los atributos, ya definimos si estos serán visibles o de solo lectura, etc. Con lo que la classe de modelo nos queda super amigable.

Creando nuestra classe controladora

Vamos ahora con nuestra classe controladora ‘CocheController.kt’, vemos que también es super amigable a la vista(Bueno, quizás todavía no estamos suficientemente acostumbrados):

package com.lostsys.kotlin.spring

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import java.util.concurrent.atomic.AtomicLong

@RestController
class CocheController {

    @GetMapping("/coches")
    fun coches():List<Coche> {
    	return listOf(
    		Coche("1010BBR", "Renault", "Cinco", "Azul"),
    		Coche("1012BJA", "Fiat", "Bravo", "Rojo")
    		)
    	}
}

En esta classe simplemente mapeamos la ruta ‘/coches’ donde devolveremos un listado de dos coches puestos a mano.

Creando nuestra classe de aplicación Spring

Ahora ya solo nos queda implementar nuestra classe que define la aplicación. Vamos a por ella ‘App.kt’:

package com.lostsys.kotlin.spring

import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication

@SpringBootApplication
class App

	fun main(args: Array<String>) {
    	SpringApplication.run(App::class.java, *args)
		}

Con unas pocas líneas de código ya tenemos nuestro servicio Rest configurado.

Arrancando la aplicación

Ahora ya solo nos queda arrancar la aplicación y comprobar si funciona, en este caso ejecutamos en la línea de comandos:

./gradlew bootRun

Y esto deberia arrancarnos el servidor Tomcat con la aplicación:

Kotlin: Gradle start app

Kotlin: Gradle start app

Y finalmente, si ponemos el navegador vemos:

Kotlin: Restfull App working

Kotlin: Restfull App working

Conclusiones

Kotlin esta demostrando ser un lenguaje de programación que nos permite crear aplicaciones muy bien estructuradas y, sobretodo, fáciles de entender y mantenibles.

Además, creo que podemos hacer cualquier cosa que podamos hacer ahora mismo con Java, incluido aprovechar todas sus librerías y frameworks. Esto ha sido una decisión estrategica muy buena por parte de JetBrains porque una de las barreras mas importantes de cualquier lenguaje es tener una base de código importante para utilizar(Si tienes un buen lenguaje pero no tienes librerías, frameworks, etc. no sirve para nada).

En fin, espero que os haya gustado el post. Hasta la próxima…

 

Leave a Reply