Vamos criar uma API capaz de encurtar uma URL. A API seguirá uma arquitetura baseada em Model-View-Controller (MVC)
A arquitetura Model-View-Controller (MVC) é um padrão de design amplamente utilizado na construção de aplicações de software, proporcionando uma organização estruturada e modular.
- Model (Modelo): Manipula dados e lógica de negócios na API REST. Responsável por validação de dados e interações com o banco de dados.
- View (Visão): Na API REST, representa o formato de apresentação dos dados (JSON, XML, etc.) e é focado na representação dos recursos para consumo pelo cliente.
- Controller (Controlador): Recebe requisições HTTP, interpreta e chama serviços para manipular recursos. Atua como intermediário entre as requisições do cliente e a lógica de negócios e fornece respostas formatadas ao cliente, geralmente no formato desejado (como JSON).
- Banco de Dados
- Armazena os dados persistentes da aplicação.
- Pode ser um sistema de gerenciamento de banco de dados como MySQL, MongoDB, PostgreSQL, entre outros.
- Responsável por garantir a integridade, consistência e recuperação eficiente dos dados.
- Camada Repository
- Atua como uma ponte entre a camada de serviço e o banco de dados.
- Realiza operações CRUD (Criar, Ler, Atualizar, Excluir) no banco de dados.
- Abstrai as consultas e operações de banco de dados para a camada de serviço.
- Camada Model
- Define a estrutura de dados da aplicação.
- Representa as entidades e seus relacionamentos.
- Pode incluir validações de dados e lógica de negócios básica.
- Normalmente reflete diretamente a estrutura do banco de dados.
- Camada Service
- Implementa a lógica de negócios da aplicação.
- Interage com a camada de modelo para realizar operações específicas.
- Pode conter regras de validação, cálculos e outras operações que não são diretamente relacionadas à manipulação de dados.
- Camada Controller
- Responsável por lidar com as requisições do cliente.
- Interpreta os comandos do usuário e chama os serviços apropriados.
- Responde ao cliente, geralmente fornecendo dados em um formato específico (JSON, XML, etc.).
- Gerencia o fluxo de controle da aplicação.
- Cliente (Client)
- Representa a interface com o usuário.
- Pode ser um aplicativo da web, aplicativo móvel, ou qualquer interface que os usuários finais utilizem.
- Envia solicitações para o controlador e recebe as respostas para exibir ou processar.
POST /
Descrição: Cria uma URL curta a partir de uma URL original.
Parâmetros da solicitação no corpo:
- originalUrl (obrigatório): A URL original a ser encurtada.
Exemplo de solicitação:
POST /
Corpo da solicitação:
{
"originalUrl": "https://www.example.com"
}
Resposta bem-sucedida para criação de URL curta (POST):
http
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "12345",
"originalUrl": "https://www.example.com",
"shortUrl": "abc123"
}
GET /{shortUrl}
Descrição: Redireciona para a URL original com base no código de URL encurtada.
Exemplo de solicitação:
GET /abc123
Resposta bem-sucedida para redirecionamento (GET):
http
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com
Resposta mal-sucedida para redirecionamento (GET):
http
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"message": "URL Not Found",
"timestamp": "2023-05-18T10:30:00",
"status": 404,
"error": "class dev.camila.url.shortener.exception.BusinessException",
"details": {
"Cause": "'abc123' not found"
}
}