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.


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

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.


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.
About The Author: James Coonce
James Coonce is a programmer from Tampa Fl that has a love for golf, travel and language learning. When he's not hitting golf balls, he's probably watching foreign movies.
More posts by James Coonce