03 - Implementa Serviços Web
video: https://youtu.be/... no frontmatter da nota.Implementa Serviços Web (Web Services)
A Implementação de Serviços Web (Web Services) através do protocolo HTTP representa a transição da Internet de um sistema de documentos para um ecossistema de dados programáveis. Um Serviço Web é uma interface técnica que permite a comunicação e a troca de informações estruturadas entre diferentes sistemas, independentemente da linguagem de programação ou da plataforma de hardware utilizada. O HTTP, por sua onipresença e flexibilidade, tornou-se o meio de transporte universal para estas arquiteturas de serviços distribuídos.
1. URL e Recursos: A Base do Modelo Web
A pedra fundamental de qualquer serviço web é o conceito de Recurso (Resource) identificado por uma URL (Uniform Resource Locator). Um recurso pode ser qualquer entidade manipulável por software: um usuário, um pedido, um documento, uma imagem, ou até mesmo um conceito abstrato como "saldo de conta".
Anatomia de uma URL
https://api.empresa.com:443/v1/users/42/orders?status=active&page=2
\___/ \_____________/\__/\___________/\________________________/
| | | | |
scheme host port path query
- Scheme: Protocolo utilizado (
https,http,ws,wss). - Host: Domínio ou IP do servidor.
- Port: Porta TCP (default 443 para HTTPS).
- Path: Identifica o recurso na hierarquia do serviço.
- Query: Parâmetros adicionais para filtragem/paginação.
A filosofia REST (Fielding, 2000) estabelece que a URL deve identificar um substantivo (recurso) e nunca um verbo (ação). As ações são representadas pelos métodos HTTP.
2. Arquiteturas de Serviços Web: Do SOAP ao GraphQL
O HTTP serviu como base para diferentes filosofias de implementação de serviços ao longo das décadas.
SOAP (Simple Object Access Protocol)
Foi a primeira grande norma para serviços corporativos. Utiliza XML para estruturar mensagens e um arquivo WSDL (Web Services Description Language) para descrever as operações. O SOAP é extremamente rigoroso e suporta transações complexas, sendo amplamente utilizado no setor bancário e governamental.
- *Padrões WS-: WS-Security, WS-ReliableMessaging, WS-AtomicTransaction.
- Transportes: Embora tipicamente HTTP, pode operar sobre SMTP, JMS, TCP.
- Vantagem: Contratos formais rígidos e suporte transacional nativo.
- Desvantagem: Verboso, lento, complexo de implementar.
REST (Representational State Transfer)
Atualmente a arquitetura mais difundida. O REST utiliza os próprios métodos nativos do HTTP (GET, POST, PUT, DELETE) para operar sobre recursos identificados por URLs. Em vez de comandos complexos, o REST foca na manipulação de estados através de representações leves, como o JSON.
Os 6 princípios REST (Fielding, RFC dissertação de 2000):
- Client-Server: Separação clara entre cliente e servidor.
- Stateless: Cada requisição contém todo o contexto necessário.
- Cacheable: Respostas devem ser explicitamente cacheáveis ou não.
- Uniform Interface: Identificação de recursos via URL, manipulação via representações, mensagens auto-descritivas, HATEOAS.
- Layered System: Cliente não sabe se fala com servidor real ou intermediário.
- Code-on-Demand (opcional): Servidor pode enviar código executável (JS) ao cliente.
GraphQL
A evolução moderna que permite ao cliente solicitar exatamente os dados de que precisa, em uma única requisição. Embora ainda utilize o HTTP como transporte, o GraphQL centraliza as chamadas em um único endpoint, otimizando a banda e reduzindo o número de requisições.
# Cliente pede exatamente os campos que precisa
query {
user(id: 42) {
nome
email
pedidos(last: 5) {
id
total
}
}
}
gRPC
Protocolo moderno baseado em HTTP/2 que usa Protocol Buffers (binário) para serialização. Suporta streaming bidirecional e é amplamente utilizado em microserviços internos devido à alta performance.
| Arquitetura | Formato | Transporte | Cenário Típico |
|---|---|---|---|
| SOAP | XML | HTTP/SMTP/JMS | Bancos, governo, legados |
| REST | JSON | HTTP/1.1 ou 2 | APIs públicas, mobile, web |
| GraphQL | JSON | HTTP | Apps com múltiplas views |
| gRPC | Protobuf | HTTP/2 | Comunicação microserviço-a-microserviço |
3. Formatos de Dados: O Triunfo do JSON
A eficiência de um serviço web depende da forma como os dados são serializados para o transporte.
- XML (Extensible Markup Language): Robusto e auto-descritivo, mas verboso e pesado. Exige processadores complexos (parsers) no cliente. Ainda usado em SOAP e integrações legadas.
- JSON (JavaScript Object Notation): Leve, fácil de ler para humanos e nativo para navegadores. Tornou-se o padrão de fato para APIs REST devido ao seu baixo overhead e alta velocidade de processamento.
- YAML: Mais legível para humanos, usado em configurações (OpenAPI, Kubernetes).
- Protocol Buffers (Protobuf): Binário e compacto, usado em gRPC.
Comparativo de Tamanho
{"id":42,"nome":"Maria","email":"maria@x.com"}
<user><id>42</id><nome>Maria</nome><email>maria@x.com</email></user>
A versão JSON tem ~50 bytes; a XML tem ~75 bytes (50% maior). Para milhões de requisições, a diferença é significativa em banda e CPU.
4. Frameworks que Implementam Serviços Web
Diversos frameworks facilitam a implementação de serviços web sobre HTTP:
| Linguagem | Framework | Característica |
|---|---|---|
| JavaScript | Express, Fastify, NestJS | Minimalistas, amplamente usados em Node.js |
| Python | Django, Flask, FastAPI | FastAPI gera OpenAPI automaticamente |
| Java | Spring Boot, JAX-RS | Padrão corporativo enterprise |
| C# | ASP.NET Core, Web API | Integração total com ecossistema Microsoft |
| Go | Gin, Echo, Fiber | Alta performance, baixa latência |
| Ruby | Rails, Sinatra | Convention over configuration |
| PHP | Laravel, Symfony | Maduro, amplamente hospedado |
Exemplo de Serviço REST em Express.js
const express = require('express');
const app = express();
app.use(express.json());
app.get('/users/:id', async (req, res) => {
const user = await db.findUser(req.params.id);
if (!user) return res.status(404).json({error: 'User not found'});
res.json(user);
});
app.post('/users', async (req, res) => {
const user = await db.createUser(req.body);
res.status(201).location(`/users/${user.id}`).json(user);
});
app.listen(3000);
5. Autenticação e Segurança de APIs
Diferente de sessões de usuário baseadas em cookies, os serviços web utilizam mecanismos de autenticação focados em máquinas (M2M).
- API Keys: Chaves simples enviadas nos cabeçalhos (
X-API-Key: abc123). Simples, mas vulneráveis a interceptação. - HTTP Basic Auth: Usuario:senha codificados em Base64 no header
Authorization. Inseguro sem HTTPS. - OAuth 2.0: O padrão industrial (RFC 6749) para autorização delegada, permitindo que serviços acessem dados uns dos outros sem compartilhar senhas.
- JWT (JSON Web Token, RFC 7519): Tokens compactos e assinados digitalmente que transportam informações de identidade e permissões de forma stateless, ideal para arquiteturas de microserviços.
Estrutura de um JWT
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0MiIsImV4cCI6MTcxMjM0NTY3OH0.signature
\__________________/\___________________________________________________/\________/
Header Payload Signature
6. Perspectiva de Cyber Security: Protegendo os Endpoints
Serviços web são alvos constantes de ataques automatizados devido ao seu papel crítico na integração de dados corporativos.
Políticas de CORS (Cross-Origin Resource Sharing)
Mecanismo de segurança que permite (ou nega) que um navegador solicite dados de um domínio diferente daquele que originou a página. Sem uma política CORS bem configurada, um site malicioso poderia realizar chamadas de API contra serviços protegidos através da sessão do usuário.
Injeção e Segurança em Nível de Esquema
Atacantes tentam injetar scripts ou comandos SQL através de campos de entrada da API. A validação rigorosa de tipos e o uso de WAF (Web Application Firewall) são obrigatórios para mitigar ataques de injeção massiva de dados. As principais categorias seguem o OWASP API Security Top 10: BOLA, Broken Authentication, Excessive Data Exposure, Lack of Rate Limiting e Broken Function Level Authorization.
7. Auditoria Técnica e Monitoramento de Serviços
# Endpoint REST via cURL com Bearer
curl -v -H "Authorization: Bearer eyJhbGciOiJI..." https://api.empresa.com/v1/users
# Verificar politicas CORS
curl -i -H "Origin: http://evil.com" -H "Access-Control-Request-Method: GET" \
https://api.empresa.com/v1/ping
# Submeter payload JSON
curl -X POST -H "Content-Type: application/json" \
-d '{"nome":"Maria","email":"maria@x.com"}' https://api.empresa.com/v1/users
Análise de Rate Limiting: Bons serviços implementam limitador de chamadas para evitar força bruta ou estouro de recursos. O servidor retorna 429 Too Many Requests, geralmente com o cabeçalho Retry-After: 60 indicando quantos segundos aguardar.
8. Versão, Documentação e Conclusão
APIs não podem mudar bruscamente sem quebrar integrações. Estratégias comuns: URI Versioning (/v1/users, mais comum), Header Versioning (Accept: application/vnd.empresa.v1+json) e Query Parameter (?version=1). A especificação OpenAPI (sucessora do Swagger) padroniza a descrição de APIs REST em YAML/JSON, permitindo geração automática de documentação, SDKs clientes e mocks para testes.
Os Serviços Web transformaram o HTTP em uma rede de inteligência programática. Dominar as arquiteturas REST, GraphQL e gRPC, os desafios de segurança via JWT e as políticas de controle CORS é essencial para construir infraestruturas de integração robustas e seguras. Na era da transformação digital, a competência técnica em implementar e auditar serviços web é o diferencial que sustenta a agilidade e a conectividade das organizações modernas.