Crie uma Java REST API com Quarkus e Eclipse JNoSQL para MongoDB
Otavio Santana6 min read • Published Jan 30, 2024 • Updated Jan 30, 2024
APLICATIVO COMPLETO
Avalie esse Tutorial
Neste tutorial, você aprenderá como criar uma API RESTful usando o Quarkus, uma estrutura para construir aplicativos Java, e integrá-la ao Eclipse JNoSQL para trabalhar com o MongoDB. Criaremos uma API simples para gerenciar os registros do desenvolvedor.
A combinação do Quarkus com o Eclipse JNoSQL permite que você trabalhe com bancos de dados NoSQL usando uma API unificada, facilitando a alternância entre diferentes sistemas de banco de dados NoSQL.
Para este tutorial, você precisará de:
- Java 17.
- Maven.
- Um cluster do MongoDB.
- Docker (Opção 1)
- MongoDB Atlas (Opção 2)
Você pode usar o seguinte comando do Docker para iniciar uma instância MongoDB standalone:
1 docker run --rm -d --name mongodb-instance -p 27017:27017 mongo
- Configure seu projeto selecionando as opções desejadas, como o ID do grupo e do artefato.
- Adicione as dependências necessárias ao seu projeto. Para este tutorial, adicionaremos:
- JNoSQL Document MongoDB [quarkus-jnosql-document-mongodb]
- RESTEasy Reactive [quakus-restasy-reactive]
- RESTEasy Reactive Jackson [quarkus-resteasy-reactive-jackson]
- OpenAPI [quarkus-smallrye-openapi]
- Gere o projeto, baixe o arquivo ZIP e extraia-o para o local de sua preferência. Lembre-se de que a estrutura do arquivo pode variar de acordo com diferentes versões do Quarkus, mas isso deve ser suficiente para o tutorial. O foco principal será modificar o arquivo
pom.xml
e o código-fonte, que permanecem relativamente consistentes entre as versões. Quaisquer pequenas diferenças estruturas devem ser boas para o seu progresso, e você pode consultar a documentação específica da versão, se necessário, para uma experiência de aprendizado perfeita.
Neste ponto, seu arquivo
pom.xml
deve ficar assim:1 <dependencies> 2 <dependency> 3 <groupId>io.quarkus</groupId> 4 <artifactId>quarkus-resteasy-reactive-jackson</artifactId> 5 </dependency> 6 <dependency> 7 <groupId>io.quarkiverse.jnosql</groupId> 8 <artifactId>quarkus-jnosql-document-mongodb</artifactId> 9 <version>1.0.5</version> 10 </dependency> 11 <dependency> 12 <groupId>io.quarkus</groupId> 13 <artifactId>quarkus-smallrye-openapi</artifactId> 14 </dependency> 15 <dependency> 16 <groupId>io.quarkus</groupId> 17 <artifactId>quarkus-resteasy-reactive</artifactId> 18 </dependency> 19 <dependency> 20 <groupId>io.quarkus</groupId> 21 <artifactId>quarkus-arc</artifactId> 22 </dependency> 23 <dependency> 24 <groupId>io.quarkus</groupId> 25 <artifactId>quarkus-junit5</artifactId> 26 <scope>test</scope> 27 </dependency> 28 <dependency> 29 <groupId>io.rest-assured</groupId> 30 <artifactId>rest-assured</artifactId> 31 <scope>test</scope> 32 </dependency> 33 </dependencies>
Por padrão, quakus-jnosql-document-mongodb está na versão
1.0.5
, mas a versão mais recente é 3.2.2.1
. Você deve atualizar seu pom.xml
para usar a versão mais recente:1 <dependency> 2 <groupId>io.quarkiverse.jnosql</groupId> 3 <artifactId>quarkus-jnosql-document-mongodb</artifactId> 4 <version>3.2.2.1</version> 5 </dependency>
Antes de mergulhar na implementação, é essencial configurar seu MongoDB database corretamente. No MongoDB, você deve definir credenciais e configurações específicas para se conectar à sua instância do banco de dados. O Eclipse JNoSQL fornece um mecanismo de configuração flexível que permite gerenciar essas configurações com eficiência.
Você pode encontrar configurações e configurações detalhadas para vários bancos de dados, incluindo o MongoDB, no repositório do Eclipse JNoSQL no GitHub.
Para executar seu aplicativo localmente, você pode configurar o nome do banco de dados e as propriedades no arquivo
application.properties
do seu aplicativo. Abra este arquivo e adicione a seguinte linha para definir o nome do banco de dados:1 quarkus.mongodb.connection-string=mongodb://localhost:27017 2 jnosql.document.database=school
Esta configuração habilitará seu aplicativo para:
- Use o banco de dados “school”.
- Conecte-se ao cluster MongoDB disponível na connection string fornecida.
Na produção, certifique-se de ativar o controle de acesso e impor a autenticação. Consulte a lista de verificação de segurança para obter mais detalhes.
Importa realçar que o Eclipse JNoSQL utiliza o Eclipse MicroProfile Configuration, projetado para facilitar a implementação de aplicativos de 12 fatores, especialmente no gerenciamento de configurações. Isso significa que você pode substituir propriedades por variáveis de ambiente, permitindo alternar entre diferentes configurações para desenvolvimento, teste e produção sem modificar seu código. Essa flexibilidade é um aspecto valorizado na construção de aplicativos robustos e facilmente implementáveis.
Agora que seu banco de dados está configurado, você pode prosseguir com o tutorial e criar sua API RESTful com Quarkus e Eclipse JNoSQL para MongoDB.
Nesta etapa, criaremos uma entidade
Developer
simples utilizando registros Java. Crie um novo registro no diretóriosrc/main/java
denominado Developer
.1 import jakarta.nosql.Column; 2 import jakarta.nosql.Entity; 3 import jakarta.nosql.Id; 4 5 import java.time.LocalDate; 6 import java.util.Objects; 7 import java.util.UUID; 8 9 10 public record Developer( 11 @Id String id, 12 @Column String name, 13 @Column LocalDate birthday 14 ) { 15 16 public static Developer newDeveloper(String name, LocalDate birthday) { 17 Objects.requireNonNull(name, "name is required"); 18 Objects.requireNonNull(birthday, "birthday is required"); 19 return new Developer( 20 UUID.randomUUID().toString(), 21 name, 22 birthday); 23 } 24 25 public Developer update(String name, LocalDate birthday) { 26 Objects.requireNonNull(name, "name is required"); 27 Objects.requireNonNull(birthday, "birthday is required"); 28 return new Developer( 29 this.id(), 30 name, 31 birthday); 32 } 33 }
Agora, vamos criar uma API RESTful para gerenciar registros de desenvolvedores. Crie uma nova classe no
src/main/java
denominada DevelopersResource
.1 import jakarta.inject.Inject; 2 import jakarta.nosql.document.DocumentTemplate; 3 import jakarta.ws.rs.*; 4 import jakarta.ws.rs.core.MediaType; 5 import jakarta.ws.rs.core.Response; 6 7 import java.time.LocalDate; 8 import java.util.List; 9 10 11 12 13 public class DevelopersResource { 14 15 16 DocumentTemplate template; 17 18 19 public List<Developer> listAll( String name) { 20 if (name == null) { 21 return template.select(Developer.class).result(); 22 } 23 24 return template.select(Developer.class) 25 .where("name") 26 .like(name) 27 .result(); 28 } 29 30 public record NewDeveloperRequest(String name, LocalDate birthday) { 31 } 32 33 34 public Developer add(NewDeveloperRequest request) { 35 var newDeveloper = Developer.newDeveloper(request.name(), request.birthday()); 36 return template.insert(newDeveloper); 37 } 38 39 40 41 public Developer get( String id) { 42 return template.find(Developer.class, id) 43 .orElseThrow(() -> new WebApplicationException(Response.Status.NOT_FOUND)); 44 } 45 46 public record UpdateDeveloperRequest(String name, LocalDate birthday) { 47 } 48 49 50 51 public Developer update( String id, UpdateDeveloperRequest request) { 52 var developer = template.find(Developer.class, id) 53 .orElseThrow(() -> new WebApplicationException(Response.Status.NOT_FOUND)); 54 var updatedDeveloper = developer.update(request.name(), request.birthday()); 55 return template.update(updatedDeveloper); 56 57 } 58 59 60 61 public void delete( String id) { 62 template.delete(Developer.class, id); 63 } 64 }
Agora que criamos nossa API RESTful para gerenciar registros de desenvolvedores, é hora de colocá-la em teste. Mostraremos como interagir com a API usando várias solicitações HTTP e ferramentas de linha de comando.
1 ./mvnw compile quarkus:dev
Você pode usar a solicitação
POST
para criar um novo registro de desenvolvedor. Usaremos curl
para esta demonstração:1 curl -X POST "http://localhost:8080/developers" -H 'Content-Type: application/json' -d '{"name": "Max", "birthday": " 2 2022-05-01"}'
Essa solicitação
POST
envia uma carga útil JSON com o nome e o aniversário do desenvolvedor para o endpoint da API. Você receberá uma resposta com os detalhes do desenvolvedor recém-criado.Para recuperar uma lista de desenvolvedores, você pode usar a
GET
solicitação:1 curl http://localhost:8080/developers
Esta solicitação do
GET
retorna uma lista de todos os desenvolvedores armazenados no banco de dados. Para obter detalhes de um desenvolvedor específico, forneça seu ID exclusivo na URL:1 curl http://localhost:8080/developers/a6905449-4523-48b6-bcd8-426128014582
Essa solicitação retornará as informações do desenvolvedor associadas ao ID fornecido.
Você pode atualizar as informações de um desenvolvedor usando a solicitação
PUT
:1 curl -X PUT "http://localhost:8080/developers/a6905449-4523-48b6-bcd8-426128014582" -H 'Content-Type: application/json' 2 -d '{"name": "Owen", "birthday": "2022-05-01"}'
Neste exemplo, atualizamos o desenvolvedor com o ID fornecido fornecendo um novo nome e aniversário na carga útil JSON.
Por fim, para excluir um registro de desenvolvedor, use a solicitação DELETE:
1 curl -X DELETE "http://localhost:8080/developers/a6905449-4523-48b6-bcd8-426128014582"
Essa solicitação remove do banco de dadosa entrada do desenvolvedor associada ao
id
fornecido .Seguindo essas etapas simples, você pode interagir com sua API RESTful para gerenciar os registros do desenvolvedor de forma eficaz. Essas solicitações HTTP permitem criar, ler, atualizar e excluir entradas de desenvolvedor, fornecendo controle e funcionalidade totais para sua API.
Explore e adapte esses comandos para atender aos seus casos de uso e requisitos específicos.
A OpenAPI é uma ferramenta poderosa que permite testar e explorar sua API visualmente. Você pode acessar a documentação OpenAPI para seu projeto Quartokus na seguinte URL:
1 http://localhost:8080/q/swagger-ui/
O OpenAPI fornece uma interface amigável que exibe todos os endpoints disponíveis e suas descrições e permite fazer solicitações de API diretamente do navegador. É uma ferramenta essencial para o desenvolvimento de API porque:
- facilita o teste de API: você pode enviar solicitações e receber respostas diretamente da interface OpenAPI, facilitando a verificação da funcionalidade de sua API.
- Gera documentação: isso é crucial para desenvolvedores que precisam entender como usar sua API de forma eficaz.
- Permite explorar: você pode explorar todos os endpoints disponíveis, seus parâmetros de entrada e as respostas esperadas, o que o ajuda a entender os recursos da API.
- Auxilia na depuração: mostra detalhes da solicitação e da resposta, facilitando a identificação e a resolução de problemas.
Concluindo, o uso do OpenAPI junto com sua API RESTful simplifica o processo de teste e pesquisa, melhora a documentação e melhora a experiência geral do desenvolvedor ao trabalhar com sua API. É uma ferramenta essencial nas práticas modernos de desenvolvimento de API.
Neste tutorial, você obteve informações valiosas sobre a criação de uma REST API usando o Quartokus e sua integração perfeita com o Eclipse JNoSQL para MongoDB. Agora você pode gerenciar com eficiência os registros do desenvolvedor por meio de uma API unificada, simplificando suas operações de banco de dados NoSQL. No entanto, para levar sua experiência com o MongoDB ainda mais longe e aproveitar todo o poder do MongoDB Atlas, considere migrar seu aplicativo para o MongoDB Atlas.
O MongoDB Atlas oferece um poderoso modelo de documento, permitindo que você armazene dados como objetos semelhantes a JSON que se assemelham muito ao seu código de aplicativo. Com o MongoDB Atlas, você pode aproveitar suas ferramentas e linguagens de programação preferidas. Quer você gerencie seus clusters por meio da CLI do MongoDB para Atlas ou adote ferramentas de infraestrutura como código (IaC) como Terraform ou Cloudformation, o MongoDB Atlas fornece uma solução contínua e escalável para suas necessidades de banco de dados.
Acesse o código-fonte usado neste tutorial.