Data: 24/08/2026
Escopo:
• Trilha Java: Sistemas com Java (spec_sistemas_com_java) $\longrightarrow$ Backend com Spring Boot (spec_backend_com_java_e_springboot)
• Trilha Python: Sistemas com Python (spec_sistemas_com_python) $\longrightarrow$ Backend com FastAPI (spec_backend_com_python_e_fastapi)
Objetivo: Estabelecer o guia canônico de transição da programação local monousuário para sistemas distribuídos em nuvem.
| Dimensão da Engenharia | 🖥️ No Mundo Desktop / Core (Sistemas Locais) | 🌐 No Mundo Web / Backend (Sistemas Distribuídos) | O Que Muda / Por Que Muda? |
|---|---|---|---|
| Arquitetura Geral | Monolito Local Monousuário executado na máquina do cliente. | Arquitetura Cliente-Servidor Multi-inquilino (Multi-tenant) hospedada em servidores/nuvem. | O processamento e as regras de negócio saem do cliente e passam a rodar centralizados no servidor. |
| Comunicação / Apresentação | Eventos de Interface Gráfica (ActionEvent, cliques em botões, frames). |
Protocolo HTTP / HTTPS, Verbos (GET, POST, PUT, DELETE) e Payloads JSON. |
O backend não renderiza telas diretamente; ele expõe endpoints padronizados (APIs RESTful). |
| Gerenciamento de Estado | Stateful: O estado da aplicação e do usuário fica retido na memória RAM local (Heap). | Stateless: Cada requisição HTTP deve conter todas as informações necessárias para ser processada. | Permite que múltiplos servidores atendam requisições sem depender de sessão em memória local. |
| Persistência de Dados | Drivers Diretos e SQL Manual: JDBC Connection, PreparedStatement ou sqlite3 com queries manuais. |
ORM (Object-Relational Mapping): JPA/Hibernate, Spring Data, SQLAlchemy ou SQLModel. | Abstrai a escrita de SQL repetitivo, gerencia ciclo de vida das entidades, cache e relacionamentos. |
| Inversão de Controle (IoC/DI) | Instanciação Manual (new / Factories): O código cliente cria diretamente as dependências. |
Injeção Automática de Dependências: O framework gerencia o ciclo de vida (@Autowired, Depends()). |
Elimina o forte acoplamento entre classes e viabiliza testes unitários e mocks com extrema facilidade. |
| Contratos de Dados | Entidades de Domínio Compartilhadas: As mesmas classes do modelo transitam na interface. | DTOs (Data Transfer Objects) e Schemas: Separação estrita entre modelo de banco e dados expostos na rede. | Evita vazamento de dados sensíveis (senhas, auditorias) e acoplamento entre o banco e a API pública. |
| Segurança e Acesso | Validação em Tela Local: if (senha.equals(correta)) verificado no próprio cliente. |
Autenticação Stateless: Tokens criptografados JWT (JSON Web Tokens) e protocolo OAuth2. | O servidor não confia no cliente; cada requisição é validada via cabeçalho Authorization: Bearer <token>. |
| Manipulação de Arquivos | Sistema de Arquivos Local: Leitura e escrita direta em pastas do disco rígido (C:\, /tmp). |
Armazenamento em Nuvem / Object Storage: Uploads em buckets AWS S3 ou MinIO via streams. | Servidores web são efêmeros e descartáveis; arquivos estáticos devem residir em storage persistente. |
| Documentação Técnica | Javadoc / Docstrings Locais: Arquivos HTML estáticos consultados em tempo de desenvolvimento. | Documentação Interativa Viva: Swagger UI / OpenAPI / ReDoc geradas dinamicamente. | Permite que times de frontend e terceiros testem e consumam a API diretamente pelo navegador. |
| Escala e Concorrência | Threads Locais / UI Thread: Evitar travamento da tela gráfica local. | Servidores de Aplicação e Concorrência Web: Tomcat, Uvicorn, Workers, Pools de Conexões. | O backend deve atender dezenas de milhares de usuários simultâneos com alto throughput. |
| Testes de Software | Testes de Unidade de Classes: Validar métodos de classes individuais (assertEquals, assert). |
Testes de Integração de Endpoints HTTP: MockMvc, WebTestClient, httpx.AsyncClient. |
Valida o ciclo completo da requisição HTTP: serialização JSON, filtros de segurança, banco e status code. |
| Empacotamento e Deploy | Executável Local: Arquivo .jar, .exe ou script .py instalado na máquina do usuário. |
Imagens de Contêineres: Docker, Docker Compose, Kubernetes e Deploy em Nuvem. | Garante portabilidade idêntica entre ambientes de desenvolvimento, homologação e produção. |
spec_sistemas_com_java $\longrightarrow$ spec_backend_com_java_e_springbootflowchart LR
subgraph JAVA_DESK["☕ Sistemas com Java (Desktop/Core)"]
J1["DAO Manual (PreparedStatement & ResultSet)"]
J2["Instanciação Direta ('new VendedorDaoJdbc()')"]
J3["Interface JavaFX (Stage, Scene, FXML, Controller)"]
J4["Login Simples em Janela Local"]
J5["FileOutputStream no Disco Rígido"]
J6["Banco Relacional Local (H2 / MySQL)"]
end
subgraph JAVA_WEB["🍃 Backend com Java & Spring Boot"]
S1["Spring Data JPA (@Entity, JpaRepository)"]
S2["Injeção de Dependências (@Service, @Repository, @Autowired)"]
S3["APIs RESTful (@RestController, @GetMapping, DTOs)"]
S4["Spring Security + Filtros + Tokens JWT Stateless"]
S5["AWS S3 SDK (AmazonS3 / S3Client)"]
S6["NoSQL MongoDB (MongoRepository)"]
end
J1 -->|Evolui para| S1
J2 -->|Evolui para| S2
J3 -->|Evolui para| S3
J4 -->|Evolui para| S4
J5 -->|Evolui para| S5
J6 -->|Evolui para| S6
| Conceito / Componente | No Curso de Sistemas com Java (Desktop) | No Curso de Backend com Spring Boot (Web) |
|---|---|---|
| Persistência de Dados | java.sql.Connection, PreparedStatement ps = conn.prepareStatement("SELECT * ..."), iteração manual com rs.next(). (Capítulo 21) |
Anotações JPA @Entity, @Id, @GeneratedValue, @ManyToOne e interfaces public interface ProdutoRepository extends JpaRepository<Produto, Long>. (Tópico 24) |
| Inversão de Controle & DI | Fábricas manuais (DaoFactory.createSellerDao()) e passagem explícita de referências por construtor. (Capítulo 15) |
Gerenciamento pelo ApplicationContext do Spring com anotações @Component, @Service, @Repository e injeção automática no construtor. (Tópico 20) |
| Camada de Apresentação | Interface gráfica rica local com JavaFX, arquivos de layout .fxml e Initializable Controller. (Capítulo 22) |
Controladores REST com @RestController, @RequestMapping("/api/v1/produtos"), retornando ResponseEntity<T> com serialização JSON automática. (Tópico 25a) |
| Contrato e Validação | Validação imperativa em métodos setters (if (preco <= 0) throw new IllegalArgumentException()). (Capítulo 07) |
DTOs imutáveis com Jakarta Bean Validation (@NotBlank, @NotNull, @Positive, @Email) e captura global de erros via @ControllerAdvice / @ExceptionHandler. (Tópico 25c) |
| Autenticação e Permissões | Verificação de usuário e senha consultando tabela local e guardando objeto UsuarioLogado em memória estática. |
Filtro OncePerRequestFilter, cadeia de segurança SecurityFilterChain, criptografia de senhas com BCryptPasswordEncoder e geração/validação de tokens JWT. (Tópico 25b) |
| Documentação de Sistema | Geração de documentação estática Javadoc a partir de comentários /** ... */. (Capítulo 01) |
Springdoc OpenAPI / Swagger 3, expondo interface web interativa em /swagger-ui.html com decorators @Operation e @ApiResponse. (Tópico 25e) |
| Arquitetura de Dados | Modelo estritamente Relacional (Tabelas, Chaves Primárias, Chaves Estrangeiras e JOINs em SQL). (Capítulo 21) | Modelo Documental NoSQL com MongoDB (@Document, @Field, coleções não-estruturadas e queries com @Query). (Tópico 26) |
spec_sistemas_com_python $\longrightarrow$ spec_backend_com_python_e_fastapiflowchart LR
subgraph PY_DESK["🐍 Sistemas com Python (Desktop/Core)"]
P1["sqlite3 Direto (Cursor, execute, commit)"]
P2["Instanciação Direta de Classes e DAOs"]
P3["CustomTkinter (CTk, CTkFrame, CTkButton)"]
P4["Dataclasses Locais (@dataclass)"]
P5["with open(...) Local"]
P6["Loops e Funções Síncronas"]
end
subgraph PY_WEB["⚡ Backend com Python & FastAPI"]
F1["SQLAlchemy 2.0 / SQLModel (AsyncSession, select)"]
F2["Injeção de Dependências com 'Depends()'"]
F3["APIs ASGI Assíncronas (FastAPI, APIRouter)"]
F4["Schemas Pydantic v2 (BaseModel, Field)"]
F5["UploadFile + Integração AWS S3 / Boto3"]
F6["Rotas Assíncronas 'async def' & Uvicorn"]
end
P1 -->|Evolui para| F1
P2 -->|Evolui para| F2
P3 -->|Evolui para| F3
P4 -->|Evolui para| F4
P5 -->|Evolui para| F5
P6 -->|Evolui para| F6
| Conceito / Componente | No Curso de Sistemas com Python (Desktop) | No Curso de Backend com FastAPI (Web) |
|---|---|---|
| Persistência de Dados | import sqlite3, conn.cursor(), cursor.execute("SELECT ... WHERE id = ?", (id,)), cursor.fetchone(). (Capítulo 21) |
SQLAlchemy 2.0 / SQLModel: Classes herdando de SQLModel, table=True, sessões assíncronas com AsyncSession, queries declarativas select(Produto).where(...). (Capítulo 05) |
| Inversão de Controle & DI | Instanciação de serviços passando instâncias concretas no __init__ ou via Protocols. (Capítulo 15) |
Sistema de Injeção de Dependências Depends() do FastAPI para gerenciar conexões de banco (get_db), autenticação (get_current_user) e serviços. (Capítulo 04) |
| Camada de Apresentação | Interface gráfica moderna com customtkinter.CTk(), CTkButton, variáveis observáveis e binds de clique. (Capítulo 22) |
Roteadores FastAPI (APIRouter), decoradores @router.get(), @router.post(), parsing de cabeçalhos, query strings e corpo JSON. (Capítulo 03) |
| Modelagem e DTOs | @dataclass(frozen=True, slots=True) para entidades de dados imutáveis em memória. (Capítulo 19) |
Pydantic v2 BaseModel: Schemas tipados de Request e Response (ProdutoCreate, ProdutoResponse), validações com Field(gt=0, max_length=100). (Capítulo 02) |
| Autenticação e Permissões | Validação imperativa de login contra tabela local de usuários. (Capítulo 07) | OAuth2PasswordBearer, hashing de senhas com passlib (bcrypt), geração e decodificação de tokens JWT com python-jose ou PyJWT. (Capítulo 06) |
| Documentação Técnica | Docstrings padronizadas conforme PEP 257 \"\"\"...\"\"\" em módulos e funções. (Capítulo 01) |
Geração OpenAPI Automática via Swagger UI em /docs e ReDoc em /redoc, documentando tipos, códigos de erro e schemas. (Capítulo 07) |
| Armazenamento de Arquivos | Leitura e escrita em disco local usando with open("arquivo.csv", "r") as f:. (Capítulo 14) |
Recepção de arquivos via UploadFile, leitura em stream assíncrono e upload para AWS S3 utilizando aioboto3 ou boto3. (Capítulo 09) |
| Concorrência e Assincronia | Concorrência básica com threading e corrotinas simples asyncio.run(). (Capítulo 20) |
Rotas declaradas com async def, servidor ASGI de alta performance Uvicorn, e BackgroundTasks para tarefas não-bloqueantes. (Capítulos 01 e 08) |
| Recurso Web / Backend | 🍃 No Ecossistema Java (Spring Boot) | ⚡ No Ecossistema Python (FastAPI) |
|---|---|---|
| Servidor / Runtime HTTP | Apache Tomcat Embutido (Servlet / Thread Pool) | Uvicorn / Gunicorn (Servidor ASGI Assíncrono com Event Loop) |
| Controlador de Rotas | @RestController + @GetMapping("/itens") |
app = FastAPI() + @app.get("/itens") |
| Contratos e DTOs | Java Records + Jakarta Validation (@NotNull, @Size) |
Classes Pydantic v2 BaseModel + Field(...) |
| Injeção de Dependência | @Autowired / Injeção via Construtor (@Service) |
Depends(get_db) / Annotated[Session, Depends(get_db)] |
| ORM / Banco de Dados | Hibernate + Spring Data JPA (JpaRepository<T, ID>) |
SQLAlchemy 2.0 / SQLModel (AsyncSession, select(T)) |
| Segurança & JWT | Spring Security + SecurityFilterChain + JJWT |
FastAPI Security (OAuth2PasswordBearer) + python-jose / PyJWT |
| Documentação Viva | Springdoc OpenAPI / Swagger UI (/swagger-ui.html) |
Swagger UI NATIVO (/docs) e ReDoc (/redoc) |
| Tratamento de Exceções | @ControllerAdvice + @ExceptionHandler(RecursoNotFound.class) |
@app.exception_handler(RecursoNotFoundException) |
| Upload de Mídia | MultipartFile + AmazonS3 Client |
UploadFile + Boto3 / Aioboto3 |
| Tarefas em Segundo Plano | @Async + ThreadPoolTaskExecutor |
BackgroundTasks.add_task(funcao, params) |
| Testes de Integração | @SpringBootTest + MockMvc |
pytest + TestClient(app) / httpx.AsyncClient |
| Containerização | Spring Boot Dockerfile multi-stage com Eclipse Temurin JRE | Dockerfile multi-stage com Python Slim / UV |