Desenvolver um sistema de cadastro e gerenciamento de cursos em Angular utilizando Reactive Forms. O aluno criará formulários reativos com campos dinâmicos (FormArray) para gerenciar módulos e aulas dentro de cada curso, com validações e integração a uma API REST já fornecida. O desafio cobre o ciclo CRUD completo: criar, listar, visualizar, editar e remover cursos.
Materiais para você usar como base para o desenvolvimento
Estrutura, regras e requisitos do projeto
Seja muito bem-vindo ao desafio do módulo de Reactive Forms com Angular.
Neste desafio, você terá a oportunidade de colocar em prática os principais conceitos aprendidos durante o módulo, como FormGroup, FormControl, FormArray, validators e integração com API.
Como todo desafio, algumas partes podem exigir pesquisa adicional, e isso faz parte do processo de aprendizado. Vá com calma, teste bastante e confie no seu progresso. Com certeza você sairá desse desafio com muito mais domínio sobre formulários reativos no Angular 💜
Você irá desenvolver um sistema de cadastro e gerenciamento de cursos.
A aplicação permitirá criar, editar, visualizar e remover cursos utilizando Reactive Forms para controlar o estado dos formulários e garantir validações.
Cada curso poderá possuir vários módulos, e cada módulo poderá conter várias aulas — utilizando FormArray para gerenciar esses campos dinâmicos.
A aplicação deverá se integrar com uma API REST já pronta e disponibilizada para você.
Crie um formulário reativo para cadastrar um curso com os seguintes campos:
Cada curso possui uma lista dinâmica de módulos e aulas, gerenciada com FormArray:
Curso ├── Módulo 1 │ ├── Aula 1 │ └── Aula 2 └── Módulo 2 └── Aula 1
Adicione um botão para resetar completamente o formulário, limpando todos os campos e os FormArrays de módulos e aulas.
Uma API REST completa já está pronta para este desafio. Ela utiliza json-server com um servidor customizado que inclui CORS, validação e geração automática de IDs.
Pré-requisito: Node.js instalado (v18+)
⚠️ Importante: Utilize o comando npm start (que executa node server.js).
Não use
npx json-server db.jsondiretamente, pois o servidor customizado possui tratamento de CORS, validação de dados e geração de UUIDs.
# Clone o repositório da API # HTTP git clone https://github.com/rocketseat-education/angular-challenge-course-forms-server.git # SSH git clone git@github.com:rocketseat-education/angular-challenge-course-forms-server.git # Acesse a pasta da API cd angular-challenge-course-forms-server
A API estará disponível em http://localhost:3000.
| Método | Rota | Descrição |
|---|---|---|
| GET | /courses | Lista todos |
| GET | /courses/search?name= | Busca por nome |
| GET | /courses/:id | Busca por ID |
| POST | /courses | Cria novo curso |
| PUT | /courses/:id | Atualiza curso |
| DELETE | /courses/:id | Remove curso |
{ name: Reactive Forms com Angular, description: Aprenda a criar formulários reativos com Angular., category: Frontend, modules: [ { name: Fundamentos do Angular, lessons: [ { name: Introdução ao Angular }, { name: Componentes e Templates }
Os IDs são gerados automaticamente pela API. Não é necessário enviá-los no body.
A API retorna erros de validação no formato:
{ timestamp: 2026-01-01T00:00:00.000Z, status: 400, message: Erro de validação, errors: { name: O nome do curso é obrigatório, modules: O curso precisa ter ao menos um módulo } }
Após concluir o desafio:
E que tal compartilhar seu aprendizado no LinkedIn contando como foi desenvolver esse desafio? Isso ajuda a consolidar o conhecimento e mostrar suas habilidades para o mercado 🚀
Feito com 💜 por Rocketseat
Seja muito bem-vindo ao desafio do módulo de Reactive Forms com Angular.
Neste desafio, você terá a oportunidade de colocar em prática os principais conceitos aprendidos durante o módulo, como FormGroup, FormControl, FormArray, validators e integração com API.
Como todo desafio, algumas partes podem exigir pesquisa adicional, e isso faz parte do processo de aprendizado. Vá com calma, teste bastante e confie no seu progresso. Com certeza você sairá desse desafio com muito mais domínio sobre formulários reativos no Angular 💜
Você irá desenvolver um sistema de cadastro e gerenciamento de cursos.
A aplicação permitirá criar, editar, visualizar e remover cursos utilizando Reactive Forms para controlar o estado dos formulários e garantir validações.
Cada curso poderá possuir vários módulos, e cada módulo poderá conter várias aulas — utilizando FormArray para gerenciar esses campos dinâmicos.
A aplicação deverá se integrar com uma API REST já pronta e disponibilizada para você.
Crie um formulário reativo para cadastrar um curso com os seguintes campos:
Cada curso possui uma lista dinâmica de módulos e aulas, gerenciada com FormArray:
Curso ├── Módulo 1 │ ├── Aula 1 │ └── Aula 2 └── Módulo 2 └── Aula 1
Adicione um botão para resetar completamente o formulário, limpando todos os campos e os FormArrays de módulos e aulas.
Uma API REST completa já está pronta para este desafio. Ela utiliza json-server com um servidor customizado que inclui CORS, validação e geração automática de IDs.
Pré-requisito: Node.js instalado (v18+)
⚠️ Importante: Utilize o comando npm start (que executa node server.js).
Não use
npx json-server db.jsondiretamente, pois o servidor customizado possui tratamento de CORS, validação de dados e geração de UUIDs.
# Clone o repositório da API # HTTP git clone https://github.com/rocketseat-education/angular-challenge-course-forms-server.git # SSH git clone git@github.com:rocketseat-education/angular-challenge-course-forms-server.git # Acesse a pasta da API cd angular-challenge-course-forms-server
A API estará disponível em http://localhost:3000.
| Método | Rota | Descrição |
|---|---|---|
| GET | /courses | Lista todos |
| GET | /courses/search?name= | Busca por nome |
| GET | /courses/:id | Busca por ID |
| POST | /courses | Cria novo curso |
| PUT | /courses/:id | Atualiza curso |
| DELETE | /courses/:id | Remove curso |
{ name: Reactive Forms com Angular, description: Aprenda a criar formulários reativos com Angular., category: Frontend, modules: [ { name: Fundamentos do Angular, lessons: [ { name: Introdução ao Angular }, { name: Componentes e Templates }
Os IDs são gerados automaticamente pela API. Não é necessário enviá-los no body.
A API retorna erros de validação no formato:
{ timestamp: 2026-01-01T00:00:00.000Z, status: 400, message: Erro de validação, errors: { name: O nome do curso é obrigatório, modules: O curso precisa ter ao menos um módulo } }
Após concluir o desafio:
E que tal compartilhar seu aprendizado no LinkedIn contando como foi desenvolver esse desafio? Isso ajuda a consolidar o conhecimento e mostrar suas habilidades para o mercado 🚀
Feito com 💜 por Rocketseat
Use este checklist para ajudar a organizar a sua entrega
Confira os resultados esperados do projeto

Envie o projeto para ver a resolução
Ao enviar seu projeto, você poderá conferir os resultados esperados