Criando o primeiro CRUD com NestJS \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 05 Horas 

 09 Min 

 21 Seg 

   Tempo restante da oferta: 05 09 21 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Criando o primeiro CRUD com NestJS  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

# Criando o primeiro CRUD com NestJS

 Neste artigo veremos como criar um CRUD com NestJS, o passo a passo utilizando ferramentas como o TypeORM e o banco de dados SQLite.

 [ Wesley Gado ](https://www.treinaweb.com.br/blog/autor/wesley-gado) 4 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/CRIANDO-PRIMEIRO-CRUD-COM-NESTJS.png)  

No [post anterior sobre NestJS](https://www.treinaweb.com.br/blog/o-que-e-nestjs) aprendemos a como criar nosso primeiro projeto, o clássico Hello World a partir do Nest CLI, uma ferramenta por linha de comando que permite criar arquivos e estruturas de forma prática e rápida. Agora vamos dar mais um passo e criar nosso primeiro CRUD (Create, Read, Update, Delete) com NestJS.

Lembrando que você pode acessar a [documentação do Nest CLI](https://docs.nestjs.com/cli/overview) para se aprofundar nos recursos que ele possui.

[  ![TypeScript - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/typescript.svg)   Curso TypeScript - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/typescript-fundamentos)

## Criando Projeto do Zero

Caso você não tenha o ambiente Node.js e NestJS instalado, veja os seguintes artigos:

- [Instalação do Node.js - Windows, Mac e Linux](https://www.treinaweb.com.br/blog/instalacao-do-node-js-windows-mac-e-linux)
- [O que é Nest?](https://www.treinaweb.com.br/blog/o-que-e-nestjs)

Após as instalações e configurações feitas, vamos criar nosso projeto utilizando o Nest CLI com o seguinte comando no terminal:

```
nest new crud-project

```

O comando acima irá criar os arquivos para a base do nosso projeto e instalar o package manager que vamos utilizar (você pode escolher entre `npm`, `yarn` ou `pnpm`). Para este artigo escolhi o `npm`.

Ao final da execução do comando, teremos uma estrutura da seguinte forma:

![Estrutra de um projeto criado pelo Nest CLi](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/estrutura-nestjs.png)

Ótimo! A base da nossa aplicação já está criada, neste exemplo vamos fazer um gerenciador de usuários, para isto precisamos criar toda a estrutura que irá prover o CRUD, como os arquivos referentes as camadas de entidade, controller, service e repository:

- **Entidade:** são os modelos da aplicação que irão espelhar as tabelas do banco de dados.
- **Controller**: é a camada responsável pelas rotas, respostas e requisições.
- **Service**: é a camada responsável pela aplicação das regras de negócio.
- **Repository**: é a camada responsável pela comunicação com o banco de dados.

Mais uma vez podemos utilizar o Nest CLI para nos auxiliar na criação destes arquivos, para isto vamos utilizar o comando:

```
nest g res users --no-spec

```

**Obs**.: Antes de utilizar o comando verifique o diretório do projeto, após criarmos o projeto com o `nest new nome-do-projeto`, provavelmente será necessário acessar pelo terminal o diretório criado, portanto, com o comando `cd nome-do-projeto`.

Explicando este comando, a flag `g` representa o comando `generate`, ou seja, estamos solicitando que o Nest CLI gere um arquivo, combinando a flag `res` estamos apontando para gerar um `resource`, assim, criando todos os arquivos referente a estrutura do Nest para a entidade `users`.

A flag `--no-spec` é utilizada para não gerar os arquivos de teste, que não serão necessários para este artigo, mas caso seja interessante para o seu projeto, basta ignorar.

Antes de gerar os arquivos, o Nest CLI irá perguntar qual padrão que será utilizado, como REST, GraphQL, Microservice, etc. Para fins de exemplo, iremos utilizar o padrão [REST](https://www.treinaweb.com.br/blog/rest-nao-e-simplesmente-retornar-json-indo-alem-com-apis-rest).

Após a execução do comando, teremos a estrutura do nosso domínio `users` criada automaticamente:

![Pasta de entidades do projeto crud com nestjs](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/entidades.png)

Algo importante a complementar é que além de gerar os arquivos, o Nest CLI também agiliza na importação dos módulos. Como criamos o novo domínio `users`, é necessário a importação referente a este domínio no módulo principal da nossa aplicação, o `app.module`:

![Modulo da aplicação](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/imports-appModule.png)

Perceba que o `UsersModule` foi importado automaticamente, isso é importante pois além de poupar tempo de quem está desenvolvendo também elimina possíveis erros que podem ser ocasionados por esquecimento ou erros de digitação.

## Definindo entidade user e configurando banco de dados

[  ![Node.js - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/node-js.svg)   Curso Node.js - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/nodejs-fundamentos)

Neste momento precisamos definir a nossa entidade `user` e quais propriedades ela terá. Para facilitar vamos ter apenas três propriedades: id, nome, idade.

O arquivo `user.entity.ts` ficará como abaixo:

```tsx
export class User {
  id: number;
  nome: string;
  idade: number;
}

```

Perfeito! Temos a nossa entidade já com suas devidas propriedades, mas precisamos ter um banco de dados para salvar e manipular essas informações, para isso, vamos utilizar o [TypeORM](https://typeorm.io/) com o SQLite para fins didáticos. Não se preocupe sobre o [ORM](https://www.treinaweb.com.br/blog/o-que-e-orm), vamos nos aprofundar nele em posts futuros. Lembrando que o foco deste artigo é que você consiga criar seu CRUD com NestJS.

Para instalar o TypeORM e o driver de conexão do SQLite vamos utilizar o npm, com o seguinte comando:

```
npm i @nestjs/typeorm typeorm sqlite3

```

Após a instalação, vamos criar o arquivo de configuração do banco de dados no diretório `/src` e vamos chama-lo de `ormconfig.ts`:

```tsx
import { DataSourceOptions } from 'typeorm';

export const config: DataSourceOptions = {
  type: 'sqlite',
  database: '.db/sql',
  synchronize: true, // Obs: use synchronize: true somente em desenvolvimento.
  entities: [__dirname + '/**/*.entity{.ts,.js}'],
};

```

E então importar a configuração no modulo da aplicação `app.module.ts`, passando a constante `config` no `TypeOrmModule.forRoot()`, como abaixo:

```tsx
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from './users/users.module';
import { config } from './ormconfig';

@Module({
  imports: [UsersModule, TypeOrmModule.forRoot(config)],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

```

O próximo passo será configurar a entidade users para que o TypeORM mapeie e crie o espelho da tabela no banco:

```tsx
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn('increment')
  id: number;

  @Column()
  nome: string;

  @Column()
  idade: number;
}

```

Veja que utilizamos o decorator `@Entity()` para apontar que a classe User é uma entidade, e suas propriedades sendo colunas, assim como o id sendo uma chave primária.

Desta forma podemos testar se tudo está ocorrendo conforme o esperado, vamos executar nossa aplicação e cruzar os dedos! 🤞

Para isto, basta executar o seguinte comando:

```
npm run start

```

## Finalmente, vamos ao CRUD com NestJS!

[  ![Express - Desenvolvendo aplicações web](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/express.svg)   Curso Express - Desenvolvendo aplicações web Conhecer o curso ](https://www.treinaweb.com.br/curso/express-desenvolvendo-aplicacoes-web)

Agora que já temos a nossa aplicação criada e configurada, nós vamos começar de fato com o desenvolvimento das funcionalidades de CRUD.

### Criando um usuário

Primeiramente vamos criar um usuário, para isto precisamos definir as propriedades no arquivo `create-user.dto`, neste caso, o id será gerado automaticamente, portanto vamos passar o nome e idade:

```tsx
export class CreateUserDto {
  nome: string;
  idade: number;
}

```

Ótimo, agora o próprio TypeORM nos fornece uma série de recursos que podemos utilizar em nossa aplicação, como injetar um repositório referente a entidade que estamos trabalhando na camada de service, como por exemplo no `users.service.ts`:

```tsx
@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository,
  ) {}
  create(createUserDto: CreateUserDto) {
    return this.userRepository.save(createUserDto);
  }
}

```

Para isso, utilizamos o `@InjectRepository(User)` e então criamos um objeto do tipo `Repository` passando no construtor da classe `UsersService`, utilizando a [injeção de dependências](https://www.treinaweb.com.br/blog/entendendo-injecao-de-dependencia/). Desta forma podemos chamar os métodos que irão se comunicar com o banco e efetivamente manipular os dados, neste primeiro exemplo estamos criando um usuário utilizando o método `create()`, e agora vamos para a camada do controller.

O controller é o responsável pelas rotas e pelas requests/responses, para criar um recurso vamos utilizar o verbo POST e chamar o método create do service, conforme abaixo:

```tsx
@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.usersService.create(createUserDto);
  }
}

```

**Obs**: Caso você não tenha conhecimento em APIs REST e protocolo HTTP recomendo fortemente a leitura do artigo [O que é HTTP](https://www.treinaweb.com.br/blog/o-que-e-http-request-get-post-response-200-404) e sobre [REST](https://www.treinaweb.com.br/blog/rest-nao-e-simplesmente-retornar-json-indo-alem-com-apis-rest).

Agora é simples, no controller temos a rota users e a requisição POST, onde vamos receber um `createUserDto`, chamar o método `create` do `usersService` para criar um novo registro.

![Requisição POST executada com sucesso - Criação de registro](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/criando-usuario.png)

**Obs**: Por padrão a aplicação é criada utilizando a porta 3000, você pode alterar no arquivo `main.ts`.

Para testar utilizamos o [insomnia](https://insomnia.rest/download), fizemos uma requisição POST para http://localhost:3000/users passando o JSON com as propriedades nome e idade (que definimos no CreateUserDto), com isso tivemos o retorno que o registro foi salvo e possui o **id: 1**. Ótimo, nossa rota para criar usuários está funcionando corretamente.

### Atualizando um usuário

[  ![Nest.js - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/nest-js.svg)   Curso Nest.js - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/nestjs-fundamentos)

Para atualizar um registro, vamos utilizar o verbo PATCH, veja que há um método em nosso controller criado pelo Nest CLI, vamos usá-lo.

```tsx
@Patch(':id')
update(@Param('id') id: number, @Body() updateUserDto: UpdateUserDto) {
  return this.usersService.update(id, updateUserDto);
}

```

Neste caso temos na rota o id, ou seja, precisamos passar na url o id do registro que queremos atualizar, para este exemplo, ficará: http://localhost:3000/users/1, desta forma vamos atualizar o usuário de id igual a 1.

O arquivo `UpdateUserDto` está estendendo parte do `CreateUserDto`, portanto, neste momento não precisamos alterar este arquivo, pois vamos atualizar o nome e/ou idade de qualquer forma.

Por fim, precisamos criar o método em nosso service que irá atualizar efetivamente o usuário:

```tsx
update(id: number, updateUserDto: UpdateUserDto) {
    return this.userRepository.update(id, updateUserDto);
}

```

Seguindo a ideia do `create`, neste momento usamos o método `update`, passamos o id do registro a ser atualizado e o dto com as novas informações.

![Requisição Patch executada com sucesso - Atualização de registro](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/atualizando-usuario-1.png)

Perfeito, temos o retorno 200 OK e a informação que um registro foi alterado.

### Criando lista e buscando usuário único

Mas fica a pergunta, como podemos ver efetivamente o registro alterado? Podemos criar uma lista ou buscar um único usuário de forma bem prática. Ao criar os arquivos com o Nest CLI, no controller há as seguintes rotas:

```tsx
@Get()
findAll() {
  return this.usersService.findAll();
}

@Get(':id')
findOne(@Param('id') id: number) {
  return this.usersService.findOne(id);
}

```

Perceba que são duas rotas utilizando o verbo HTTP GET, onde na primeira nós vamos obter a lista de registros, e na outra passamos o id para obter este único registro. Então vamos criar essas buscas em nosso service:

```tsx
findAll() {
  return this.userRepository.find();
}

findOne(id: number) {
  return this.userRepository.findOneBy({ id: id });
}

```

Agora vamos criar outro registro com as mesmas informações do primeiro só para termos mais de um usuário em nossa base, e então verificar a busca referente a lista, e então, um único registro da forma correta.

![Requisição Post executada com sucesso - Cadastro novo registro](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/cadastro-novo-registro.png)

Usuário de id igual a 2 criado com sucesso.

![Requisição Get executada com sucesso - Lista de registro](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/lista-de-registros.png)

Lista de usuários conforme o espero, repare que o registro de id igual a 1 foi atualizado com sucesso.

Por fim, vamos buscar um registro pelo seu id único:

![Requisição Get executada com sucesso - Busca de único registro](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/busca-unica-de-registro.png)

Utilizando o verbo HTTP GET, passamos o id igual a 1 na url e como esperado o retorno foi do único usuário de id igual a 1.

Portanto, criamos um usuário, atualizamos, podemos listar todos os usuário ou buscar por um único registro, agora só está faltando um recurso de nosso CRUD, o delete, então vamos ver como podemos remover um registro.

### Removendo um usuário

Para criar nossa função de remover usuários basta seguirmos a lógica das ações anteriores, com isto vamos utilizar o método remove do service da nossa aplicação:

```tsx
remove(id: number) {
  return this.userRepository.delete(id);
}

```

Podemos utilizar o repository com o método `delete` passando apenas o id do registro que queremos excluir e agora chamar o método `remove` na camada de controller.

```tsx
@Delete(':id')
remove(@Param('id') id: number) {
  return this.usersService.remove(id);
}

```

Lembrando que neste caso utilizamos o verbo HTTP DELETE e passamos o id como parâmetro.

Vamos testar!

![Requisição delete executada com sucesso - Exclusão de registro](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/deletando-registro.png)

De acordo com a imagem acima, excluímos com sucesso o registro de id igual a 1, ao buscar a lista de usuários, portanto, vamos obter somente o usuário de id igual a 2:

![Requisição get executada com sucesso - Lista de registros](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/lista-de-registros-2.png)

## Conclusão

Neste artigo aprendemos passo a passo a criar um CRUD com NestJS, utilizando ferramentas como o Nest CLI, vimos por cima o uso do TypeORM e como trabalhamos com as camadas de entidade, controller, service e repository. O NestJS nos permite criar sistemas Web e APIs de forma prática e robusta, como veremos nos próximos artigos sobre serialização, validação, autenticação e outros recursos que podemos utilizar com este [framework](https://www.treinaweb.com.br/blog/para-que-serve-um-framework).

Ah, antes que me esqueça, você pode acessar o código da aplicação desenvolvida neste artigo através do [repositório no GitHub](https://github.com/wesleygado/artigo-crud-nestjs) 😁

Nesse artigo vimos vários recursos do NestJS, mas isso é apenas o começo, existem muitos outros recursos e funcionalidades disponíveis neste incrível framework, caso queira aprender mais sobre NestJS saiba que aqui na [TreinaWeb](https://www.treinaweb.com.br/) nós temos o curso [NestJS - Fundamentos](https://www.treinaweb.com.br/curso/nestjs-fundamentos) que possui **02h07 de videos** e um total de **18 exercícios**. Conheça também nossos outros [cursos de TypeScript](https://www.treinaweb.com.br/busca?q=TypeScript).

Veja quais são os tópicos abordados durante o curso de NestJS - Fundamentos:

- Conhecendo a estrutura;
- Utilizando Nest CLI;
- Entendendo Rotas, Controllers e Views;
- Conexão com banco de dados;
- Usando TypeORM;
- Template Engine.

- [ #NodeJS ](https://www.treinaweb.com.br/blog/tag/nodejs)
- [ #Back-end ](https://www.treinaweb.com.br/blog/tag/back-end)
- [ #NestJS ](https://www.treinaweb.com.br/blog/tag/nestjs)
- [ #TypeORM ](https://www.treinaweb.com.br/blog/tag/typeorm)

Autor

 ![Wesley Gado](//secure.gravatar.com/avatar/1b770ca482a7232b1885881430a592bb?d=mm)

## Wesley Gado

 Formado em Análise e Desenvolvimento de Sistemas pelo Instituto Federal de São Paulo, atuou em projetos como desenvolvedor Front-End. Nas horas vagas grava Podcast e arrisca uns três acordes no violão. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wesley-gado)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

     3 anos atrás

    ##  [ Criando CRUD com Prisma ORM e NestJS ](https://www.treinaweb.com.br/blog/criando-crud-com-prisma-orm-e-nestjs) 

     Neste artigo vamos implementar um CRUD com Prisma ORM e NestJS, abordando as principais operações básicas com o banco de dados.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/08/NEST-JS-CLASS-VALIDATOR-CLASS-TRANSFORMER-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Validação e Serialização no NestJS: class-validator e class-transformer ](https://www.treinaweb.com.br/blog/validacao-e-serializacao-no-nestjs-class-validator-e-class-transformer) 

     Vamos abordar a utilização de duas biblitecas de serialização e validação fundamentais no NestJS: class-validator e class-transformer

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

     3 anos atrás

    ##  [ Trabalhando com Prisma ORM e NestJS ](https://www.treinaweb.com.br/blog/trabalhando-com-prisma-orm-e-nestjs) 

     Neste artigo vamos aprender os primeiros passos para trabalhar com o Prisma ORM e o NestJS.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/08/NEST-JS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Autenticação: Geração de Token JWT com NestJS e Passport ](https://www.treinaweb.com.br/blog/autenticacao-geracao-de-token-jwt-com-nestjs-e-passport) 

     Neste artigo vamos criar uma aplicação para a geração de Tokens JWT utilizando NestJS e a biblioteca Passport.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Guia do framework NestJS ](https://www.treinaweb.com.br/blog/guia-do-framework-nestjs) 

     Neste guia do framework NestJS vamos fazer um compilado de tópicos úteis sobre o framework, desde criar um projeto básico até autenticação.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/08/NEST-JS-CLASS-VALIDATOR-CLASS-TRANSFORMER-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Como enviar emails com NestJS e Nodemailer ](https://www.treinaweb.com.br/blog/como-enviar-emails-com-nestjs-e-nodemailer) 

     Neste artigo vamos aprender como enviar emails utilizando o NestJS e o Nodemailer, um dos módulos mais utilizados do ecossistema NodeJS.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Como realizar upload de arquivos locais no NestJS ](https://www.treinaweb.com.br/blog/como-realizar-upload-de-arquivos-locais-no-nestjs) 

     Neste artigo vamos aprender a utilizar o recurso de upload de arquivos locais com o NestJS utilizando a biblioteca Multer do Express.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/07161700/gerenciamento-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     4 anos atrás

    ##  [ Empacotando e publicando pacotes Python no PyPi ](https://www.treinaweb.com.br/blog/empacotando-e-publicando-pacotes-python-no-pypi) 

     Neste artigo iremos aprender como funciona o processo de empacotar e distribuir nossos próprios pacotes Python no PyPi.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/03143715/CARTER-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Criando uma API RESTful com o Carter e .NET Core ](https://www.treinaweb.com.br/blog/criando-uma-api-restful-com-o-carter-e-net-core) 

     O Carter é um framework para .NET Core, que permite criar API RESTful de forma rápida, simples e elegante. O conheça neste artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/03/o-que-e-fastapi-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Criando o primeiro CRUD com FastAPI ](https://www.treinaweb.com.br/blog/criando-o-primeiro-crud-com-fastapi) 

     Neste artigo nós iremos aprender um pouco mais sobre o FastAPI durante o desenvolvimento de uma API com todas as operações de CRUD.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/01/criando-uma-api-com-spring-data-jpa-e-spring-web-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     5 anos atrás

    ##  [ Criando uma API com Spring Data JPA e Spring Web ](https://www.treinaweb.com.br/blog/criando-uma-api-com-spring-data-jpa-e-spring-web) 

     Neste artigo vamos aprender como criar uma API com persistência de dados utilizando o Spring Web MVC e o Spring Data JPA.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/criando-api-restful-jax-rs-api-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     7 anos atrás

    ##  [ Criando uma API RESTful com a JAX-RS API ](https://www.treinaweb.com.br/blog/criando-uma-api-restful-com-a-jax-rs-api) 

     O Java define a especificação JAX-RS API para a criação de aplicações API RESTful, que pode ser facilmente utilizada com a implementação do Jersey.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **05h 09min 21s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
