Quarkus 2.0
No dia 28 de junho de 2021 foi lançado a versão 2.0 do Quarkus a página principal do anúncio está aqui. A notícia veio com uma live dentre todas as coisas que foram colocadas, vou tentar fazer um resumo do que mais me atraiu.
O que mais chama a atenção é, o cuidado que o time do framework tem com o lema para o prazer/alegria do programador. Funcionalidades que estavam meio confusas como a parte GraphQL parecem ter ganhado uma melhora. Vamos os tópicos mais interessantes.
GraphQL
Como foi mostrado neste post tinha uma complexidade, que na minha visão, era um pouco desnecessária para fazer o GraphQL funcionar.
Agora utilizando Smallrye GraphQL, ficou bem mais simples criar uma API GraphQL. Basta acrescentar @GraphQLApi, e dentro de cada método dizer qual a query/mutation/subscription vai ser representado e pronto vai funcionar. Um exemplo de Api pode ser visto aqui.
import org.eclipse.microprofile.graphql.Description;
import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Query;
import java.util.Arrays;
import java.util.List;
@GraphQLApi
public class BookResource {
@Query("allBooks")
@Description("This query will return all books that we have")
public List<Book> findAllBooks() {
Book book = new Book();
book.setAuthor("Luiz Leite");
book.setName("A vida de Luiz");
Book book1 = new Book();
book1.setName("O blog de Luiz");
book1.setAuthor("Luiz Leite");
return Arrays.asList(book, book1);
}
}
Além da implementação ter ficado bem mais simples, adicionaram nativo a parte de client com o GraphiQL, na documentação está dizendo que fica em http://localhost:8080/graphql-ui/, mas no meu caso ficou em http://localhost:8080/q/graphql-ui, Apesar de estar em outro lugar com a Dev-UI fica bem simples de identificar qualquer endpoint na aplicação. Para ver a documentação via terminal pode ser acessada seguinte chamada:
curl http://localhost:8080/graphql/schema.graphql
A documentação completa pode ser vista aqui.
Teste contínuo
Foi feature adicionada que achei mais legal, agora executando mvn quarkus:test
qualquer alteração pode ser vista, caso haja um teste que foi quebrado ou não em tempo de desenvolvimento. Para testar essa parte criei um service bem simples:
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class GreetingService {
public String sayHelloForSomeone(String name) {
return "Hello " + name;
}
public String sayByeForSomeone(String name) {
return "Bye "+ name;
}
}
Para testar a seguinte classe de teste:
import static org.junit.jupiter.api.Assertions.assertEquals;
class GreetingServiceTest {
private final GreetingService greetingService = new GreetingService();
@Test
public void testSayHello() {
String name = "Luiz";
assertEquals("Hello Luiz", greetingService.sayHelloForSomeone(name));
}
@Test
public void testSayBye() {
String name = "Luiz";
assertEquals(greetingService.sayByeForSomeone(name),"Bye Luiz");
}
}
Depois de rodar o comando mvn quarkus:dev
no final mostra uma mensagem como a seguinte:
All 2 tests are passing (0 skipped), 2 tests were run in 194ms. Tests completed at 17:22:42.
Press [r] to re-run, [v] to view full results, [p] to pause, [h] for more options>
Agora sem alterar o teste e para o comando vamos alterar o método com.luizleiteoliveira.service.GreetingService#sayByeForSomeone com Bye bye
ao invés de Bye
, logo após salvar já aparece a mensagem no terminal:
: org.opentest4j.AssertionFailedError: expected: <Bye bye Luiz> but was: <Bye Luiz>
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
at org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1124)
at com.luizleiteoliveira.service.GreetingServiceTest.testSayBye(GreetingServiceTest.java:20)
2021-07-04 17:25:27,530 ERROR [io.qua.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> 1 TESTS FAILED <<<<<<<<<<<<<<<<<<<<
--
1 tests failed (1 passing, 0 skipped), 2 tests were run in 11ms. Tests completed at 17:25:27 due to changes to GreetingService.class.
Press [r] to re-run, [v] to view full results, [p] to pause, [h] for more options>
Existem também mais opções como:
[b] -> rodar apenas testes que quebraram.
[v] -> exibir erros que aconteceram na ultima vez que os tests rodaram.
[q] -> sair
Vertx 4.0
Seguindo a onda reativa o Vertx 4 traz um suporte melhor para esta parte, além acrescentar uma melhoria em tracing bem significativa compatível com Zipkin.
Kotlin
Essa é uma parte que eu nem sabia que não suportava, mas agora adicionaram suporte a coroutines, além REST Cliet e Reactive Messaging
Quarkus CLI
Para tentar eliminar comandos de Maven e Gradle na nova versão foi disponibilizada uma ferramenta para linha de comando totalmente voltada para o Quarkus.
Conclusão
Como pode ser visto, a ferramenta tem evoluído muito no sentido de tornar mais fácil alguns pontos para desenvolvedores, todas me agradaram muito, mas ainda precisamos ver alguns pontos como autenticação e autorização dentro do GraphQL, além disto, não é recomendável o upgrade para quem está dentro do Java 8.
Se quiser lembrar aqui está o post da época do 1.0 Quarkus 1.0
Todo o código que foi comentado está neste repositório no GitHub
Want to follow me?
You can get in contact me on this social media.
GitHub: luizleite-hotmart
Twitter: luizleite_
Twitch: coffee_and_code
Linkedin: luizleiteoliveira