Skip to content

Instantly share code, notes, and snippets.

@cami-la
Last active January 23, 2024 21:21
Show Gist options
  • Save cami-la/965187ef59d108e886bc95b1c00b0b7a to your computer and use it in GitHub Desktop.
Save cami-la/965187ef59d108e886bc95b1c00b0b7a to your computer and use it in GitHub Desktop.
Conhecendo a Arquitetura do Projeto - Encurtador de URL API

Vamos criar uma API capaz de encurtar uma URL. A API seguirá uma arquitetura baseada em Model-View-Controller (MVC)

Conhecendo a Arquitetura do Projeto

Spongebob Squarepants Internet GIF

O que aprenderemos nesta aula:

  1. Arquitetura do Projeto - Model-View-Controller (MVC)
  2. Endpoints Rest Encurtador de URL

Arquitetura do Projeto - 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.

  1. 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.
  2. 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.
  3. 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.

Endpoints Rest Encurtador de URL

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"
  }
}

< ANTERIOR | PRÓXIMO >

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment