Artigos > Programação

APIs com Kotlin e Spring Data REST - parte 2

Gabriel Leite
Gabriel Leite

Como vimos na parte 1 deste artigo, foi possível atingir o objetivo de minha colega Camila ao utilizar o Kotlin aliado ao Spring Data REST para a construção, quase que instantânea, de uma API no padrão REST. Contudo, a demanda dela fez com que um mergulho um pouco mais aprofundado nessa biblioteca fosse necessário, e é isso que vamos ver agora.

Padronizando a URL da API

Por padrão, ao criarmos os endpoints de nossa API, como visto no último artigo, o Spring Data REST cria URLs no padrão dominio/recurso-no-plural. Como estamos rodando a aplicação no domínio localhost:8080 e o único recurso criado é o da classe Instructor, temos ao final a URL localhost:8080/instructors sendo o endpoint base para esse recurso. Ou seja, a URL é construída com base no plural dos nomes das classes de nossos recursos. Isso tudo, graças à biblioteca Evo Inflector, que é utilizada por baixo dos panos. Contudo, uma coisa muito importante que precisa ser observada, é que ela é voltada para a língua inglesa! Caso seja necessário trabalhar com termos em português ou de outras línguas, uma saída é a utilização da anotação @RepositoryRestResource.

@RepositoryRestResource(path = "docentes")
interface DocenteRepository extends CrudRepository<Person, Long> {}

Dessa forma, conseguiríamos uma URL como localhost:8080/docentes utilizando o termo corretamente no plural e na língua portuguesa.

Ainda assim, um outro detalhe importante a se observar, é que geralmente, utilizamos uma URL raiz para as APIs, como localhost:8080/api, a partir da qual, acrescentamos o caminho do recurso que queremos acessar. E esse, é justamente o passo que minha colega gostaria de dar, tendo como principal motivo o fato de que no endereço localhost:8080 estaria rodando a aplicação Front-End que consumiria a API em desenvolvimento.

E a boa notícia é que tal objetivo é bem simples de se atingir! Graças a boa organização do Spring Data REST, tudo que precisamos, é lançar mão de uma configuração chamada spring.data.rest.basePath. Ela é a responsável por indicar a base da URL utilizada para a API. Bastando assim, que seja feito algo, como visto a seguir, no arquivo de propriedades da aplicação.

# src/main/resources/application.properties

spring.data.rest.basePath=/api

Assim, se voltarmos a executar a nossa aplicação, veremos que todas as URLs, tanto de requisição, quanto de resposta, já irão considerar o endereço localhost:8080/api como a raiz de nossa aplicação REST.

Customizando as operações

Por fim, mas não menos importante, a última necessidade de minha colega era a remoção da operação de deleção. Ou seja, era necessário que a API não atendesse requisições do verbo DELETE para o endereço localhost:8080/api/instructors/id-do-recurso já que a intenção era que tivéssemos sempre um histórico das informações desse recurso em questão.

Para resolvermos essa situação, basta lembrarmos que podemos sobrescrever o comportamento dos métodos definidos pela interface CrudRepository<T, ID>. Dando uma olhada na documentação, vemos que temos os métodos delete() e deleteById(), sendo ambos responsáveis por deletar uma única instância do recurso. Sendo assim, tudo que precisamos fazer é sobrescrevê-los enquanto informamos à nossa aplicação que não queremos torná-los públicos na nossa API por meio da anotação @RestResource com a opção exported = false.

interface InstructorRepository: CrudRepository<Instructor, Long> {

   @RestResource(exported = false)
   override fun deleteById(id: Long)

   @RestResource(exported = false)
   override fun delete(instructor: Instructor)

}

E agora, ao fazermos uma requisição DELETE obtemos a resposta a seguir:

405 Method Not Allowed

Nesse ponto, uma observação extremamente importante! Para que o verbo DELETE deixe de ser atendido como queremos, é obrigatória a sobrescrita de ambos os métodos! Como visto na documentação ocorre que o algoritmo usado por baixo dos panos pelo Spring não permite que excluamos apenas um dos métodos de deleção, forçando assim, a exclusão de ambos.

Assim, consegui mostrar à minha colega, a efetividade na utilização do Spring Data REST aliado ao Kotlin e a deixei muito entusiasmada para continuar tocando o projeto em frente!

E você, o que achou? Gostaria de ver novos conteúdos de Kotlin aplicados ao Back-End? Deixe seu comentário e até a próxima!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software

Artigos > Programação

Cursos profissionais de Programação é na Alura, comece agora!

  • 1246 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1246 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1246 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1246 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso por 1 ano

Estude 24h/dia onde e quando quiser

Novos cursos todas as semanas