This post is also available in: English Português

Se necesita una comprensión básica de las solicitudes HTTP y CRUD para completar este tutorial. El enlace github se puede encontrar aquí para este proyecto.

Kotlin es uno de los lenguajes de programación más buscados en el ecosistema de desarrollo móvil y web. Se puede usar como una alternativa a Java tanto para el desarrollo de Android como para el desarrollo web de Java porque se ejecuta en la JVM y es interoperable con las API de Java. En este tutorial, vamos a repasar cómo construir una API REST usando Kotlin y Spring Boot 2. También puede ver los tutoriales en vídeo aquí y suscribirse.

Para comenzar con nuestro proyecto, primero debemos usar Spring Boot Initializer. Puede usar el que se encuentra en https://start.spring.io/ o el que está integrado en IntelliJ IDEA.

Spring Boot Init Web
Spring Boot Init Web
Spring Boo Init IntelliJ
Spring Boo Init IntelliJ

Seleccionaremos nuestras dependencias para permitir el enrutamiento Restful, persistencia de bases de datos y migraciones de bases de datos.

Spring Boot Dependency Select
Spring Boot Dependency Select

Dentro de su archivo gradle.build, verifique que se hayan instalado las dependencias correctas.

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('com.fasterxml.jackson.module:jackson-module-kotlin')
    compile('org.flywaydb:flyway-core')
    compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    compile("org.jetbrains.kotlin:kotlin-reflect")
    runtime('org.postgresql:postgresql')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Inicio de aplicaciones: configuración de migraciones

El punto de partida de nuestra aplicación está en nuestro archivo TodoListapiApplication.kt. Bajo la carpeta todolistapi, vamos a querer crear otra carpeta llamada todo, así como un archivo de clase llamado Todo.kt. Al establecer el ID de la tarea pendiente, es importante que utilice GenerationType.Identity en lugar de GenerationType.Auto porque PostgreSQL utiliza tablas de secuencia en lugar de Auto-Increment.

package com.example.kotlintodo.todo

import com.example.kotlintodo.core.BaseEntity
import javax.persistence.*

@Entity
@Table(name = "todo")
class Todo {

    /* GenerationType.IDENTITY is for databases like Postgres
        that use sequence tables instead of auto-increment
     */
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(columnDefinition = "serial") var id: Long? = null

    var title: String? = null
    var description: String? = null
    var finished: Boolean? = false


}

Ahora que tenemos la configuración del modelo, ahora tenemos que crear nuestra migración.

Dentro de nuestra carpeta principal/recursos, cree una carpeta db/migration. Crear un archivo SQL de migración para la base de datos denominada V1__Create_Todo_Table.sql

CREATE TABLE todo(
  ID SERIAL PRIMARY KEY NOT NULL,
  TITLE       VARCHAR(255),
  DESCRIPTION TEXT,
  FINISHED BOOLEAN NOT NULL
);

Ahora, dentro de su archivo build.gradle agregue la configuración de migración flyway

flyway {
	url = 'jdbc:postgresql://localhost:5432/springtodo'
	user = 'postgres'
	password = ''
	outOfOrder = true
}

Ahora ejecute el comando gradle para crear la migración.

gradle flywayMigrate -Dflyway.url=... -Dflyway.user=... -Dflyway.password=...

Configuración de controladores RESTFUL

Ahora que tenemos nuestras migraciones en funcionamiento, tenemos que encontrar una manera de obtener objetos dentro y fuera de la base de datos. Necesitaremos tanto un repositorio para nuestras acciones CRUD como un controlador para recibir solicitudes HTTP.

Primero comencemos creando un archivo TodoRepository.kt en nuestro paquete de tareas.

package com.example.kotlintodo.todo

import org.springframework.data.jpa.repository.JpaRepository

interface TodoRepository : JpaRepository<Todo, Long>

Este repositorio es una interfaz Kotlin que hereda de JpaRepository. Bajo el capó, utiliza Hibernate para asignar consultas de bases de datos a nuestro proveedor de bases de datos, PostgreSQL

Ahora que tenemos eso, ahora podemos crear nuestro controlador. Crear un nuevo paquete llamado controlador y colocarlo en un archivo TodoRestController.kt Kotlin.

package com.example.kotlintodo.controller

import com.example.kotlintodo.todo.Todo
import com.example.kotlintodo.todo.TodoRepository
import org.springframework.http.HttpStatus
import org.springframework.web.bind.annotation.*
import java.util.*

@RestController
@RequestMapping("/todos")
class TodoRestController(val todoRepository: TodoRepository) {

    @GetMapping
    fun getTodos() = todoRepository.findAll()

    @RequestMapping(path = [("/{todoId}")], method = [(RequestMethod.GET)])
    fun getTodo(@PathVariable("todoId") todoId: Long?): Optional<Todo>? {
        return todoRepository.findById(todoId)
    }

    @PostMapping
    fun newTodo(@RequestBody todo: Todo): Todo {
        todoRepository.save(todo)
        return todo
    }

    @PutMapping
    @ResponseStatus(HttpStatus.OK)
    fun updateTodo(todo: Todo) {
        todoRepository.save(todo)
    }

    @RequestMapping(path = [("/{todoId}")], method = [(RequestMethod.DELETE)])
    fun deleteTodo(@PathVariable("todoId") todoId: Long?) {
        todoRepository.deleteById(todoId)
    }
}

Ahora debería poder ejecutar la aplicación, crear, ver y eliminar sus todos.

Create Todo
Create Todo
List Todos
List Todos

Conclusión

A medida que la industria avanza, habrá un mayor cambio de Java hacia Kotlin debido a la sintaxis concisa y la disminución de la cantidad de repetitivo. Con ambos en la capacidad de operar con Android y Spring Boot, así como llamar directamente a las API de Java, aliviará el dolor de migrar codebases más antiguas. Puede consultar el video tutorial aquí y suscribirse a nuestro sitio.

Codebrains Newsletter

Get weekly dev news and tutorials.

Powered by ConvertKit

This post is also available in: English Português