Ejemplo de API Rest Blog con Spring Boot + Kotlin + Gradle

Overview

Blog

Ejemplo de API Rest Blog con Spring Boot 2.7.3 + Kotlin + Gradle + Java 17

El objetivo es que pueda servir como guía para el aprendizaje, lo más importante será histórico de Git, así como los ejemplos propuestos de la estructura y buenas prácticas al diseñar una Api Rest

Proyecto

Plantilla para crear el proyecto desde la página de start.spring.io

https://start.spring.io/#!type=gradle-project&language=kotlin&platformVersion=2.7.3&packaging=jar&jvmVersion=17&groupId=com.lgzarturo&artifactId=demo&name=demo&description=Ejemplo%20de%20API%20Rest%20Blog%20con%20Spring%20Boot%20%2B%20Kotlin%20%2B%20Gradle&packageName=com.lgzarturo.demo&dependencies=web

Estructura del proyecto

  • configurations: Se definen los estereotipos @Configuration para personalizar los recursos de la aplicación.
  • controllers: Capa con los controladores de la aplicación de tipo RestFul.
  • entities: Capa para la representación de las tablas en JPA.
  • exceptions: Se especifican las excepciones para el control de respuesta del API Rest.
  • models: Capa para representar los datos que responde la aplicación.
  • repositories: Capa con el acceso a datos, mediante interfaces de repositorios.
  • security: Se puede usar para definir los beans y las configuraciones de seguridad.
  • services: Capa de servicios para el procesamiento de las reglas de negocio.

Casos de uso

El Api debe soportar tres tipos de usuarios, uno de tipo administrador, uno de tipo autor y un visitante.

Pruebas

En el paquete test.kotlin.com.lgzarturo.blog se podrán encontrar archivos con la extension *.http, se pueden usar para hacer consultas en los endpoints, el Intellj IDEA Ultimate tiene de forma nativa un plugin que soporta estos archivos realizar solicitudes http y ofrece un método para generar la versión curl de cada endpoint.

Ejemplo

  • Abrir el archivo: AuthorControllerApiTest.http
  • Posicionar el cursor en el método que queremos exportar
  • Dar clic en el botón Convert to Curl and Copy
  • Ahora la instrucción en formato Curl estará en el Clipboard y la podemos pegar en cualquier cliente Rest como Postman.

AuthorControllerApiTest.http

Administrador

  • Registrar un autor en el blog
  • Administrar a los usuarios del blog
  • Crear categorías
  • Publicar, crear, editar y borrar artículos
  • Aprobar comentarios
  • Aprobar la publicación de artículos

Autor

  • Ver una publicación
  • Dar me gusta a una publicación
  • Escribir artículos
  • Responder a comentarios

Visitante

  • Ver publicaciones de los autores
  • Filtrar contenido por autor y categoría
  • Dar me gusta a una publicación
  • Escribir comentarios en una publicación
  • Dar me gustar a un comentario

Base de datos

  • users: Se usa para guardar el registro y credenciales de acceso de los usuarios.
  • authors: Mantiene una tabla de autores registrados en el blog.
  • posts: Almacena la información necesaria para los artículos.
  • categories: Define las categorías para organizar los artículos.
  • comments: Se llena con los comentarios de los usuarios.
  • likes_counter: Define el número de "me gusta" que tiene un artículo.

Estructura de datos

Tabla authors

Entidad Author.kt

  • id - Long(PK)
  • name - String(90)
  • avatarImage - String(255)
  • description - String(1000)
  • posts -> author_id(relationship)
  • createdAt - LocalTimeDate
  • updatedAt - LocalTimeDate

Tabla categories

Entidad Category.kt

  • id - Long(PK)
  • title - String(180)
  • slug - String(180)
  • description - String(1_000)
  • posts -> category_id(relationship)
  • createdAt - LocalDateTime
  • updatedAt - LocalDateTime

Tabla comments

Entidad Comment.kt

  • id - Long(PK)
  • parent_id - Long
  • post_id - Long
  • author - String(90)
  • authorEmail - String(255)
  • ipAddress - String(100)
  • content - String(1_000)
  • isApproved - Boolean
  • commentLikes - Long
  • createdAt - LocalDateTime
  • updatedAt - LocalDateTime

Tabla likes_counter

Entity LikeCounter.kt

  • id - Long(PK)
  • contentType - String(10)
  • contentId - Long
  • likesNumber - Long
  • createdAt - LocalDateTime
  • updatedAt - LocalDateTime

Tabla posts

Entity Post.kt

  • id - Long(PK)
  • parent_id - Long
  • title - String(180)
  • slug - String(180)
  • coverImage - String(255)
  • summary - String(1_000)
  • content - String(65_535)
  • status - String(20)
  • postType - String(20[PAGE|ARTICLE|PHOTO|VIDEO|GALLERY])
  • postLikes - Long
  • postComments - Long
  • hasPage - Boolean
  • menuOrder - Integer
  • -> author_id(relationship)
  • -> category_id(relationship)
  • publishedAt - LocalDate
  • createdAt - LocalDateTime
  • updatedAt - LocalDateTime

Tabla users

Entity User.kt

  • id - Long(PK)
  • email - String(255)
  • password - String(255)
  • userType - String(20[ADMIN|AUTHOR|USER])
  • isActive - Boolean
  • author - author_id(relationship)
  • createdAt - LocalTimeDate
  • updatedAt - LocalTimeDate

Diagrama del schema

Blog DB Schema Representación de las entidades en H2

Documentación

Referencias

You might also like...
Simple Todo list API using Spring-Boot, Webflux, Kotlin, Coroutines, & PostgreSQL

Simple Todo list API using Spring-Boot, Webflux, Kotlin, Coroutines, & PostgreSQL

Blog Backend Api built with Kotlin, Springboot and AWS

Kotlin, Spring Boot, MySQL, JPA, Hibernate Rest API for Blogs A Restful CRUD API using Kotlin, Spring Boot, Mysql, JPA and Hibernate hosted on AWS Ela

Spring Boot API for Modern Warfare 2 Dedicated Servers

Spring Boot API for Modern Warfare 2 Dedicated Servers

A sample skeleton backend app built using Spring Boot kotlin, Expedia Kotlin Graphql, Reactive Web that can be deployed to Google App Engine Flexible environmennt

spring-kotlin-gql-gae This is a sample skeleton of a backend app that was built using: Spring Boot(Kotlin) Reactive Web Sprinng Data R2DBC with MYSQL

Kotlin-GraphQL-Apollo - Sencillo cliente para consumir una API GraphQL con Apollo usando Kotlin
Kotlin-GraphQL-Apollo - Sencillo cliente para consumir una API GraphQL con Apollo usando Kotlin

Kotlin GraphQL Apollo Sencillo cliente para consumir una API GraphQL con Apollo

Ejemplo de una prueba técnica Junior aplicable a cualquier lenguaje
Ejemplo de una prueba técnica Junior aplicable a cualquier lenguaje

Prueba Técnica Cola Prioridad Sin Repetidos Ejemplo de una prueba técnica Junior aplicable a cualquier lenguaje. Prueba Técnica Cola Prioridad Sin Rep

Spring Boot Example with Kotlin and Domain Driven Design

Spring Boot Kotlin Domain Driven Design Example Just an example project where ddd is implemented with some other great patterns and architecture from

Sample Social Login Project of Spring Boot and Kotlin

Sample-Spring-Boot-Social-Kotlin Sample Social Login Project of Spring Boot and Kotlin dependencies dependencies { implementation("org.springframewor

This repository demonstrates how Kotlin can simplify Spring Boot configuration properties file mapping

Kotlin spring-boot nested config props This repository demonstrates how Kotlin can simplify Spring Boot configuration properties file mapping @Constru

Owner
Arturo López
web developer in java, kotlin, groovy, python, php y javascript.
Arturo López
Ejemplo de App Android con Kotlin, Jetpack Compose, Retrofit y consumo de la API REST de Pokémon

Pokémon Jetpack Compose Ejemplo de App Android con Kotlin, Jetpack Compose, Retrofit y consumo de la API REST de Pokémon Jetpack Compose Retrofit Poké

Brais Moure 70 Jan 31, 2023
Ejemplo de cómo trabajar con DataFrames similar a Pandas (python) en Kotlin.

Kotlin DataFrames Pandas Ejemplo de cómo trabajar con DataFrames similar a Pandas (python) en Kotlin. Kotlin DataFrames Pandas Acerca de Autor Contact

José Luis González Sánchez 2 Jul 24, 2022
Ejemplo de cómo trabajar con gráficos en Kotlin

Kotlin Let's Plot Ejemplo de cómo trabajar con gráficos en Kotlin. Kotlin Let's Plot Acerca de Autor Contacto ¿Un café? Licencia de uso Acerca de Este

José Luis González Sánchez 12 Oct 11, 2022
API Rest With Kotlin And Spring Boot

##API REST WITH KOTLIN AND SPRING BOOT GET Url: http://localhost:8080/customers Response (Status Code: 200 Ok) { "_embedded": { "customer

Felipe Baz 0 Nov 18, 2021
Cargo service: REST API, Spring Boot, Kotlin, JDBC, PostgreSQL

cargo-jdbc Cargo service, training project with Spring Boot, JDBC and Kotlin. To

Valeriy Emelyanov 1 Dec 7, 2022
Spring-kotlin - Learning API Rest with Kotlin, Spring and PostgreSQL

Kotlin, Spring, PostgreSQL and Liquibase Database Migrations Learning Kotlin for

Andre L S Ferreira 2 Feb 14, 2022
My personal template for a Spring Boot REST reactive webapp

My personal spring boot kotlin reactive template Features Spring Security implementation with JWT access and refresh token MongoDB database Project Co

Dušan 2 Dec 1, 2021
Spring-with-maven - Spring Boot App with Postgresql and maven

Spring Boot Api Aplikasi ini dibuat menggunakan bahasa kotlin dan untuk database

Aldi Aulia Rosyad 1 Jan 12, 2022
Spring-graphql-getting-started - Spring for GraphQL provides support for Spring applications built on GraphQL Java

Getting Started with GraphQL and Spring Boot Spring for GraphQL provides support

Shinya 0 Feb 2, 2022
API for a library using Kotlin, Spring-boot and covered by test

Library API This API is to create Books and be able to borrow from them I'm using: Spring Boot version 2.5.6 Kotlin 1.5.31 Java 11 I'm implementing us

Daniel Queiroz 1 Nov 5, 2021