Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

03 - Implementa Serviços Web

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione 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):

  1. Client-Server: Separação clara entre cliente e servidor.
  2. Stateless: Cada requisição contém todo o contexto necessário.
  3. Cacheable: Respostas devem ser explicitamente cacheáveis ou não.
  4. Uniform Interface: Identificação de recursos via URL, manipulação via representações, mensagens auto-descritivas, HATEOAS.
  5. Layered System: Cliente não sabe se fala com servidor real ou intermediário.
  6. 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.