25 - Serviços

Olá, pessoal! Nessa vigésima quinta aula do treinamento, iremos criar a camada de serviços.

A camada de serviços no Angular é uma classe TypeScript decorada com @Injectable(), responsável por centralizar regras de negócio, chamadas de API e manipulação de dados. Ela atua como uma ponte entre os componentes e fontes externas, permitindo o compartilhamento de estado e lógica de forma reativa (via RxJS ou Signals) em toda a aplicação.

Vamos criar este arquivo, abra o terminal do VSCode e use o seguinte código: ng g s servico/aluno-servico ou ng generate service servico/aluno-servico.

Utilize a seguinte estrutura no arquivo TS gerado:


import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Aluno } from '../modelo/Aluno';

@Injectable({
  providedIn: 'root',
})
export class AlunoServico {
  // URL base definida no seu @RequestMapping("/api/alunos")
  private readonly API = 'http://localhost:8080/api/alunos';

  constructor(private http: HttpClient) { }

  // Listar todos os alunos
  listar(): Observable {
    return this.http.get(`${this.API}/listar`);
  }

  // Cadastrar novo aluno
  cadastrar(aluno: Aluno): Observable {
    return this.http.post(`${this.API}/cadastrar`, aluno);
  }

  // Alterar aluno (passando o UUID na rota como definido no seu @PutMapping)
  alterar(aluno: Aluno): Observable {
    return this.http.put(`${this.API}/alterar/${aluno.codigo}`, aluno);
  }

  // Remover aluno
  remover(codigo: string): Observable {
    return this.http.delete(`${this.API}/remover/${codigo}`);
  }

  // Método extra para testar a mensagem de boas-vindas
  getMensagem(): Observable {
    return this.http.get(`${this.API}/mensagem`, { responseType: 'text' });
  }
}

Abaixo compartilho nossa aula no YouTube, onde explico como implementar essa camada no projeto: