This post is also available in: English Español

Um entendimento básico de solicitações HTTP e CRUD é necessário para completar este tutorial. O link github pode ser encontrado aqui para este projeto.

Kotlin é uma das linguagens de programação mais procuradas no ecossistema de desenvolvimento móvel e web. Ele pode ser usado como uma alternativa ao Java para desenvolvimento Android e Java web desenvolvimento porque ele é executado na JVM e é interoperável com APIs Java. Neste tutorial, vamos repassar como construir uma API REST usando Kotlin e Spring Boot 2. Você também pode olhar para os tutoriais em vídeo aqui e se inscrever.

Para começar com o nosso projeto, devemos primeiro usar o Spring Boot Initializer. Você pode usar o em https://start.spring.io/ ou o embutido no IntelliJ IDEA.

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

Selecionaremos nossas dependências para permitir roteamento Restful, persistência de banco de dados e migrações de banco de dados.

Spring Boot Dependency Select
Spring Boot Dependency Select

Dentro do arquivo gradle.build, verifique se as dependências corretas foram instaladas.

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')
}

Inicialização de aplicativos — Configurando migrações

O ponto de partida para a nossa aplicação está no nosso arquivo TodoListApiApplication.kt. Sob a pasta todolistapi, vamos querer criar outra pasta chamada todo, bem como um arquivo de classe chamado Todo.kt. Ao definir o ID da tarefa, é importante que você use GenerationType.Identity em vez de GenerationType.Auto porque PostgreSQL usa tabelas de sequência em vez de Auto-Incremento

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


}

Agora que temos nosso modelo configurado, agora temos que criar nossa migração.

Dentro da nossa pasta principal/recursos, crie uma pasta de db/migração. Criar um arquivo SQL de migração para o banco de dados chamado V1__Create_Todo_Table.sql

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

Agora, dentro do seu arquivo build.gradle adicione a configuração de migração flyway

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

Agora execute o comando gradle para criar a migração.

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

Configurando controladores RESTFUL

Agora que temos nossas migrações funcionando, temos que encontrar uma maneira de colocar objetos dentro e fora do banco de dados. Precisaremos tanto de um repositório para nossas ações CRUD quanto de um controlador para receber solicitações HTTP.

Primeiro vamos começar criando um arquivo TodoRepository.kt em nosso pacote todo.

package com.example.kotlintodo.todo

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

interface TodoRepository : JpaRepository<Todo, Long>

Este Repositório é uma interface Kotlin que herda do JaRepository. Sob o capô, ele usa Hibernate para mapear consultas de banco de dados para nosso provedor de banco de dados, PostgreSQL

Agora que temos isso, podemos criar nosso controlador. Crie um novo pacote chamado controller e coloque em um arquivo 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)
    }
}

Agora você deve ser capaz de executar o aplicativo, criar, visualizar e excluir seus todos.

Create Todo
Create Todo
List Todos
List Todos

Conclusão

À medida que a indústria avança, haverá uma mudança maior de Java para Kotlin devido à sintaxe concisa e à diminuição da quantidade de caldeiras. Com tanto a capacidade de operar com Android quanto Spring Boot, bem como diretamente chamar APIs Java, aliviará a dor da migração de bases de código mais antigas.

Codebrains Newsletter

Get weekly dev news and tutorials.

Powered by ConvertKit

This post is also available in: English Español