🧩 Exercícios: Consumo de APIs REST com Axios e Interceptors
Spec Frontend Com Vue • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 15.1 — Instância Centralizada do Axios com BaseURL e Headers
Contexto: Instância Centralizada do Axios com BaseURL e Headers no contexto de Consumo de APIs REST com Axios e Interceptors.
Requisitos de Execução:
- Criar instância
api = axios.create({ baseURL: 'https://api.empresa.com/v1' })com timeouts.
Resultado Esperado
Cliente HTTP Axios instanciado e configurado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_1_SeuNome - Envie na tarefa:
Atividade Cap 15 - Consumo de APIs REST com Axios e Interceptors
🔑 Gabarito de Código & Solução Comentada
// api/httpClient.ts
import axios from 'axios';
export const api = axios.create({
baseURL: import.meta.env.VITE_API_URL || 'http://localhost:8080/api/v1',
timeout: 10000,
headers: { 'Content-Type': 'application/json' },
});
🔍 Nível 2: Prática
Problema 15.2 — Request Interceptor para Injeção de Bearer Token
Contexto: Request Interceptor para Injeção de Bearer Token no contexto de Consumo de APIs REST com Axios e Interceptors.
Requisitos de Execução:
- Injetar token de autenticação do Pinia no cabeçalho
Authorizationde todas as requisições de saída.
Resultado Esperado
Bearer Token injetado automaticamente pelo interceptor de requisição.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_2_SeuNome - Envie na tarefa:
Atividade Cap 15 - Consumo de APIs REST com Axios e Interceptors
🔑 Gabarito de Código & Solução Comentada
// api/interceptors.ts
import { api } from './httpClient';
import { useAuthStore } from '@/stores/auth';
api.interceptors.request.use((config) => {
const authStore = useAuthStore();
if (authStore.token) {
config.headers.Authorization = `Bearer ${authStore.token}`;
}
return config;
});
⚡ Nível 3: Integração
Problema 15.3 — Response Interceptor para Refresh Token Automático (Status 401)
Contexto: Response Interceptor para Refresh Token Automático (Status 401) no contexto de Consumo de APIs REST com Axios e Interceptors.
Requisitos de Execução:
- Interceptar erro 401, renovar o token e reexecutar a requisição original de forma transparente.
Resultado Esperado
Renovação de token transparente executada sem deslogar o usuário.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_3_SeuNome - Envie na tarefa:
Atividade Cap 15 - Consumo de APIs REST com Axios e Interceptors
🔑 Gabarito de Código & Solução Comentada
// api/refreshTokenInterceptor.ts
api.interceptors.response.use(
(res) => res,
async (error) => {
if (error.response?.status === 401 && !error.config._retry) {
error.config._retry = true;
// Dispara renovação de token
return api(error.config);
}
return Promise.reject(error);
}
);
🏆 Nível 4: Desafio Corporativo
Problema 15.4 — Cliente HTTP com ofetch no Ecossistema Nuxt / Vue
Contexto: Cliente HTTP com ofetch no Ecossistema Nuxt / Vue no contexto de Consumo de APIs REST com Axios e Interceptors.
Requisitos de Execução:
- Utilizar
ofetch.create({ retry: 3, retryDelay: 500 })com tipagem de resposta automática.
Resultado Esperado
Cliente HTTP leve com suporte a SSR e auto-retry.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_4_SeuNome - Envie na tarefa:
Atividade Cap 15 - Consumo de APIs REST com Axios e Interceptors
🔑 Gabarito de Código & Solução Comentada
// api/ofetchClient.ts
import { ofetch } from 'ofetch';
export const apiClient = ofetch.create({
baseURL: 'https://api.empresa.com',
retry: 2,
});