Documentação arquitetural do BrasilAPI
Autores
Este documento foi produzido por Izaquiel Nunes do Nascimento.
- Matrícula: 117111446
 - Contato: izaquiel.nascimento@ccc.ufcg.edu.br
 - Projeto documentado: https://github.com/BrasilAPI/BrasilAPI
 
Descrição Arquitetural – BrasilAPI
Este documento descreve a arquitetura do projeto BrasilAPI. Essa descrição, assim como a produção de seus diagramas, foi baseada principalmente no modelo C4.
Descrição Geral sobre o BrasilAPI
O BrasilAPI tem como objetivo disponibilizar de forma rápida e prática informações públicas como CEP, DDD, feriados nacionais, dados do IBGE, entre outros. Esse projeto centraliza e disponibiliza endpoints modernos com baixíssima latência utilizando tecnologias como Vercel Smart CDN responsável por fazer o cache das informações em atualmente 23 regiões distribuídas ao longo do mundo (incluindo Brasil).
A API
Objetivo Geral
Implementar uma api rest com alta disponibilidade para dados relacionados ao Brasil.
Objetivos Específicos
Se tornar uma plataforma onde qualquer possa contribuir e integrar serviços, aumentando assim a diversidade de dados fornecida pela api.
Atualmente a API conta com esses endpoints:
- cnpj/v1/{cnpj}
 - cep/v1/{cep}
 - ddd/v1/{ddd}
 - banks/v1
 - banks/v1/{code}
 - veriados/v1/{ano}
 - ibge/uf/v1
 - ibge/uf/v1/{code}
 
Contexto
Logo abaixo temos um diagrama que mostra toda a simplicidade da api. O cliente é qualquer pessoa que deseja obter alguma informação que a api disponibiliza. É feita uma requisição HTTP e o BrasilAPI se responsabiliza por verificar se a informação está em cache ou então requisita a diversas fontes externas.

Containers
Temos apenas um container para a api, ele se encontra implantadado na Vercel. OBS: cada serviço que a api disponibiliza pode ter seus próprios containers, mas por se tratar de elementos externos não será retratado aqui.

Componentes
A API divide-se basicamente em três componentes:
- Os Middlewares, responsáveis por tratamento de cache, tratamento dos erros nas requisições e registro de logs da aplicação.
 - A api propriamente dita, responsável pelo tratamento e retorno dos dados. Esse componente faz uso do componente de Services para buscar os dados.
 - Services, responsável pela busca do dado requisitado nas mais variadas fontes de dados.
 

Visão de Informação
Abaixo temos um diagrama que mostra como a informação trafega na api. Primeiro o usuário faz uma requisição, ela é validada pelos middlewares, se tiver tudo ok, é verificado se o que foi pedido já se encontra em cache, se for encontrado algum erro é retornado pro usuário com alguma mensagem. Se a informação estiver em cache, é retornada imediatamente pro usuário, senão a api vai processar, pedindo para o serviço responsável buscar das fontes externas e retornando a informação requerida. Durante esse processo pode ocorrer algum erro e então o mesmo é retornado.
