Arquitetura do Sistema
graph TB
subgraph "Cliente"
A[Aplicação Frontend<br/>ou Cliente HTTP]
end
subgraph "API Gateway"
B[FastAPI Application]
end
subgraph "Camada de Autenticação"
C[JWT Token Middleware]
D[Password Hashing<br/>Argon2]
end
subgraph "Camada de Roteamento"
E[API Routers]
E1[Auth Router]
E2[Users Router]
E3[Brands Router]
E4[Cars Router]
end
subgraph "Camada de Serviço"
F[Business Logic]
G[Validation Layer<br/>Pydantic Schemas]
end
subgraph "Camada de Dados"
H[SQLAlchemy ORM]
I[Async Database Driver<br/>AIOSQLite/AsyncPG]
end
subgraph "Banco de Dados"
J[(SQLite/PostgreSQL)]
end
A --> B
B --> C
C --> E
E --> E1
E --> E2
E --> E3
E --> E4
E --> F
F --> G
G --> H
H --> I
I --> J
D --> H
C --> D
style A fill:#4CAF50,stroke:#388E3C,color:#fff
style B fill:#2196F3,stroke:#0D47A1,color:#fff
style C fill:#FF9800,stroke:#EF6C00,color:#fff
style D fill:#FF9800,stroke:#EF6C00,color:#fff
style E fill:#9C27B0,stroke:#4A148C,color:#fff
style F fill:#607D8B,stroke:#263238,color:#fff
style G fill:#607D8B,stroke:#263238,color:#fff
style H fill:#795548,stroke:#3E2723,color:#fff
style I fill:#795548,stroke:#3E2723,color:#fff
style J fill:#F44336,stroke:#B71C1C,color:#fff
Componentes da Arquitetura
Cliente
- Aplicação Frontend ou Cliente HTTP: Interface que consome a API, podendo ser uma aplicação web, mobile ou outro serviço.
API Gateway
- FastAPI Application: Ponto de entrada principal da aplicação, responsável por receber requisições HTTP e coordenar o fluxo de processamento.
Camada de Autenticação
- JWT Token Middleware: Middleware responsável por validar tokens JWT nas requisições protegidas.
- Password Hashing (Argon2): Componente responsável por criar e verificar hashes de senhas usando o algoritmo Argon2.
Camada de Roteamento
- API Routers: Conjunto de roteadores que dividem a funcionalidade da API em módulos lógicos:
- Auth Router: Gerencia autenticação e autorização
- Users Router: Gerencia operações relacionadas a usuários
- Brands Router: Gerencia operações relacionadas a marcas
- Cars Router: Gerencia operações relacionadas a carros
Camada de Serviço
- Business Logic: Lógica de negócios específica para cada domínio da aplicação.
- Validation Layer (Pydantic Schemas): Camada de validação de dados de entrada e saída usando esquemas Pydantic.
Camada de Dados
- SQLAlchemy ORM: Object-Relational Mapping que abstrai operações de banco de dados.
- Async Database Driver: Drivers assíncronos para comunicação com o banco de dados (AIOSQLite para SQLite, AsyncPG para PostgreSQL).
Banco de Dados
- SQLite/PostgreSQL: Sistemas de gerenciamento de banco de dados relacional onde os dados são persistidos.
Características da Arquitetura
Separation of Concerns
A arquitetura segue o princípio de separação de preocupações, com cada camada tendo responsabilidades bem definidas.
Assincronicidade
A arquitetura é totalmente assíncrona, utilizando drivers assíncronos e funções async/await para melhor desempenho e escalabilidade.
Segurança
A segurança é implementada em múltiplas camadas, desde autenticação JWT até hashing de senhas com Argon2.
Escalabilidade
A arquitetura permite fácil escalabilidade horizontal graças ao estadoless do protocolo HTTP e ao uso de tokens JWT.
Manutenibilidade
A divisão clara em camadas e módulos facilita a manutenção e evolução do sistema.