A ideia principal é implementar o mesmo CRUD com as mesmas especificações em diversas abordagens diferentes,
mas sempre utilizando o Spring
e Kotlin
.
- Spring Web
- [] Spring Web com virtual threads
- [] Spring Web Coroutine
- [] Spring WebFlux sem Coroutine (R2dbcRepository sem suspend fun)
- [] Spring WebFlux com Coroutine (CoroutineCrudRepository com suspend fun)
- É possível implementar Spring Web com Coroutine?
- Faz diferença usar Virtual Threads no Spring Web em kotlin?
- Qual abordagem do Spring WebFlux performou melhor?
atributo | descrição |
---|---|
id | obrigatório, UUID |
apelido | opcional, máximo 32 caracteres |
nome | obrigatório, máximo 255 caracteres |
data de nascimento | obrigatório, formato ISO8601 |
lista de tecnologias | optional, lista de string com cada valor obrigatório e de até 32 caracteres |
-
GET /users/{id}
-
GET /users
-
DELETE /users/{id}
-
POST /users
-
PUT /users/{id}
{
"nick": "Fulano",
"name": "João do Alface",
"birth_date": "2000-01-01T20:20:03Z",
"stack": ["Java", "NodeJS"]
}
Programação reativa é um paradigma de programação que lida com streaming de dados e eventos assíncronos. No contexto do Spring, Spring WebFlux é um módulo que permite construir aplicações Web reativas no ecossistema Spring.
Reactor é uma biblioteca non-blocking usada em Spring WebFlux. Baseada em Reactive Streams e fornece os tipos Mono e Flux para encapsular os valores.
- Mono -> Parecido com
Optional (Java)
, pode emitir 0..1 valor - Flux -> Parecido com
List
, pode emitir 0..N valores
Kotlin coroutine permite escrever código non-blocking, mas em um estilo imperativo e sequencial.
Além disso, coroutine funciona com frameworks non-blocking como o Spring WebFlux, convertendo em suspend fun
e fornecendo
tipos Flow para streaming de dados.
O ResponseEntity
faz parte do pacote Spring MVC
e o ServerResponse
faz parte do pacote Spring WebFlux
.
O WebFlux é compatível com os recursos do Spring MVC
, permitindo utilizar as anotações como @RestController
que
retornaria um ResponseEntity
.
O WebFlux sem compatibilidade usa Router
e Handler
que retorna um ServerResponse
.