Fábio Rosato
fabio.rosato@sensedia.com
@frosato
Expondo APIs de back-ends
legados e travados
Fábio Rosato
Professional Services Manager & Teacher
fabio.rosato@sensedia.com
@frosato
Every Business
is Digital
API enables
Digital
Sensedia
powers your API
Strategy
IT Architecture
Enabling Digital Transformation
Agenda
APIs e Legados
Estratégias de Exposição
Tecnologia
Amanhã logo cedo
APIs e Legados
A ideia das APIs é prover um mecanismo
simples, seguro com baixo acoplamento,
padronizado e interoperável para um
desenvolvedor construir suas apps comunicando
com um backend no menor tempo possível.
Open Innovation
Fonte: http://hackathon.ima.sp.gov.br/
Fonte: http://hackathon.ima.sp.gov.br/
http://goo.gl/PdKRPfFonte:
GPlay:https://goo.gl/vPWMK7
Plataformas IoT Mobile
Legado
Legado
Estigmas
• Aplicações moníliticas nem sempre
modularizadas, problemáticas
• Baixa capacidade de conectividade
• Ciclos de entrega longos (meses)
• Dificuldade para evoluir e compor
novas tecnologias
• Obsolecência tecnológica ou
tecnologias zumbis
Não é algo totalmente ruim
• Um sistema legado muitas vezes é
um sistema de sucesso
• Que pode ter grande impacto
positivo no negócio
Razões para mantê-lo
• O sistema funciona satisfatoriamente
• Não há razão técnica ou funcional
para mudá-lo
• O custo benefício de uma
substituição é baixo ou zero
• Justificar o ROI
• Priorização
Arquiteturas Reais
Mainframe Comercial apps
Databases
Custom appsSaaS apps
SOAP RSS
Remote
Protocols
REST
like RPC
System Layer
Services Layer
Estratégias de
Exposição
Bottom-up
Anti-pattern
Legacy
Expose Objects
JSON
Bottom
Up
Vantagens
• Rápido
• Ferramentas podem
ajudar
• O Arquiteto do
legado entende a
interface
Riscos
• Design ruim com
vícios do legado
APIFront
API Facade
Mediate
REST
API
REST
API
REST
API
REST
API
Design
Ideal
Mainframe Comercial apps
Databases
Custom appsSaaS apps
SOAP RSS
Remote
Protocols
REST
like RPC
System Layer
Services Layer
Legado
Webinar Design de APIs RESTful
http://bit.ly/Sensedia_APIsRest
API-First
Estratégias “Sem Impacto”
no código do Legado
API
Padronizada
API-Front
HTTP/REST
Legado
Mediação, Transformação e Conexão
Client
Server
Legado
Databases
API
Padronizada
API-Front
HTTP/REST
Arquitetura Web
ou Client-Server
(Thin Client)
Acesso a
Camada de
Serviços/APIs
- DCOM/COM+
- Socket TCP
- Winsock
- Corba
- RMI
- SOAP
- REST
API
“zuada”
LegadoRequest
Response
Padrões Comuns
URLs
https://api.flickr.com/services/rest/?method=flickr.galleries.addPhoto
Arquitetura Web
ou Client-Server
(Thin Client)
Acesso a
Camada de
Serviços/APIs
Legado
Request
Response
https://api.flickr.com/services/rest/?method=flickr.galleries.create
API Front
Request
Response
https://api.flickr.com/services/v1/galleries
HTTP POST
Padrões Comuns
URLs
Arquitetura Web
ou Client-Server
(Thin Client)
Acesso a
Camada de
Serviços/APIs
Legado
API
Padronizada
API-Front
HTTP/REST
Arquitetura
Mainframe
Acesso a
Camada de
“Serviços/APIs”
- HPR/IP
- TCP/IP
Mainframe
CICS / IMS
Legado
API
Padronizada
API-Front
HTTP/REST
Arquitetura
Mainframe
Acesso a
Camada de
“Serviços/APIs”
Mainframe
CICS / IMS
Padrões Comuns
Formato de
Dados
00000000000000
000
.. RBON0060
0050236039630000
0501400000000000
0000000000000012
0450310201607111
0000000000001
6370396300000000
0004052 000000
String Request
Legado
API
Padronizada
API-Front
HTTP/REST
Arquitetura
Mainframe
Acesso a
Camada de
“Serviços/APIs”
Mainframe
CICS / IMS
Padrões Comuns
Formato de
Dados
00000000000000 000 00004143 O RBON0060
005023703963000005001000000002015071000020020032014010520
16060530000000000001 23703963000000000004049
000000000214300123FABIO ROSATO 004
201601040002176PAGTO COBRANCA VIA CELULAR
0000000000150002028073123791.01807 60000.000509 20001.632403
1 22550000015000001TITULO CANCELADO PELO CLIENTE
Y066201013S000000000000000000000000000000NN00000000000000
00000000 201509300002246PAGTO COBRANCA VIA INTERNET
0000000000020002015093023791.01807 60000.000509 20001.632403
1 65670000002000001TITULO CANCELADO PELO CLIENTE
P014201013S000000000000000000000000000000NN00000000000000
00000000 201509230002232PAGTO COBRANCA VIA INTERNET
0000000000018002015092300190.00009 01009.545243 00889.009189
4 65600000001800001TITULO CANCELADO PELO CLIENTE
P014201013S000000000000000000000000000000NN00000000000000
00000000 ......
String Response
Legado
API
Padronizada
HTTP/REST
Arquitetura
Mainframe
Acesso a
Camada de
“Serviços/APIs”
Mainframe
CICS / IMS
Padrões Comuns
Formato de
Dados
{
"mensagem": 974300,
"nomeCliente": “FABIO ROSATO",
“quantidade": 4,
"regSaida": [
{
"dataPagamento": "20160104",
"numeroProtocolo": 9176,
"dadosSegundaLinhaExtrato": "PAGTO
COBRANCA VIA CELULAR",
....
JSON Response
API-Front
Acesso a
Camada de
Serviços/APIs
Vantagens
• Uso das funções (camada)
de negócio da aplicação
• Não requer alterações de
código no lado da aplicação
• Transformação de protocolo
e formato de dados pesadas
Riscos
• A diversidade de protocolos
e suas peculiaridades
• A tecnologia do API-Front
com adaptador do protocolo
• Entender todos os serviços e
funções disponibilizadas
• Dificuldade em ter aderência
RESTfull
• Dilemas em cenários de
aparente composição
• Escalabilidade
App
Legadão
Legado
Databases
API
Padronizada
API-Front
HTTP/REST
Arquitetura Web, Client-
Server, Database-
Centric, Monolitíca,
Mainframe...
Acesso a
Camada de
Dados
Database Connection
Acesso a
Camada de
Dados
Vantagens
• Não requer alterações de
código no lado da aplicação
• Vai direto ao ponto
Riscos
• Não há reaproveitamento
de regras de negócio,
exceto se as regras
estiverem em Stored
Procedures
• Pode haver a necessidade
de reimplementar algumas
regras de negócio
• API-Front tende a ficar
complexo e com baixa
coesão
Arquitetura Web, Client-
Server, Database-
Centric, Monolitíca,
Mainframe...
Web Server
HTTP
request/response
Envio de comandos get e post http e
parser do conteúdo html/dom
Web Client
Web Form
Legado
API
Padronizada
API-Front
HTTP/REST
Databases
Arquitetura Web
(Thin Client)
Web Scraping
ou Web
Harvesting
Arquitetura Web
(Thin Client)
Web Scraping
ou Web
Harvesting
Vantagens
• Uso das funções (camada)
de negócio da aplicação
• Uso do próprio protocolo
HTTP
• Não requer alterações de
código no lado da aplicação
• Interessante para um MVP
Riscos
• Dificuldade de
implementação em
HTMLs/DOM malformados
• Alterações no HTML/DOM
tendem a quebra o código
de Scraping
• Questões legais de direitos
autorais
• Dados da aplicação que não
são expostos em uma View.
https://github.com/lapwinglabs/x-ray
var path = require('path')
var read = require('fs').readFileSync
var html = read(path.resovlve(__dirname, 'index.html'))
var Xray = require('..')
var x = Xray()
x(html, 'h2')(console.log)
Arquitetura Web
(Thin Client)
Web Scraping
ou Web
Harvesting
Tecnologia
https://finbox.io/ORCL
Arquitetura Web
(Thin Client)
Web Scraping
ou Web
Harvesting
Exemplo
Estratégias “Com Impacto”
no código do Legado
App
Legadão
Legado
Databases
API
Padronizada
HTTP/REST
Criar API
Padronizada
Direto
App
Legadão
Legado
Databases
API
Padronizada
API-Front
HTTP/REST
Criar API
“zuada”
API
“zuada”
- DCOM/COM+
- Socket TCP
- Winsock
- Corba
- RMI
- SOAP
- REST
Tecnologias
API
Padronizada
API-Front
HTTP/REST
Legado
Mediação, Transformação e Conexão
Ao sabor da equipe
• Escolha módulos/frameworks leves (ex: Spring)
• Crie interceptadores para as exceções genéricas
• Prepare-se para ter várias classes utilitárias (ex:
conexão, manipulação de strings etc)
• Quebre o API Façade em “microservices”
(decomposição)
Dicas
Webinar Microservices
http://bit.ly/Sensedia_microservices
API
Padronizada
API-Front
HTTP/REST
Legado
Mediação, Transformação e Conexão
- Ao sabor da equipe
Rate Limiting
Monitoring & Alerts
Authentication Models
Policy Enforcement
Exception handling
Analytics on API Consumption
JSON Injection/XML Injection
Cache
Rate Limiting Policy
JSON Threat Policy
Payload Size Policy
IP Filtering Policy
Enderece também no API-Front questões como:
Atenção
API
Padronizada
API-Front
HTTP/REST
Legado
Mediação, Transformação e Conexão
Se tiver capacidade de conexão (adaptadores
p/ backend) melhor!!! Ele pode assumir a
responsabilidade do API-Front
API
Gateway
Amanhã logo cedo
Etapas
Plan & Prepare
Design & BuildRun & Engage
“Aqui é diferente... nosso caso é
específico...”
“Estamos fazendo as coisas assim faz
30 anos, não é possível que estamos
errado.”
Barreiras
Culturais
APIFront
API Facade
Mediate
REST
API
REST
API
REST
API
REST
API
Design
Ideal
Mainframe Comercial apps
Databases
Custom appsSaaS apps
SOAP RSS
Remote
Protocols
REST
like RPC
System Layer
Services Layer
Legado
API-Fist
Pattern
Legacy
Expose Objects
JSON
Down
Top
Vantagens
• Usabilidade da API
• Abstração
Riscos
• Entender o domínio
• Os vícios do legado
são resistentes
API Design
Mockup
API-Front
Implementation
API-Front
Design
Publish
Developer
Feedback
Design & Build
Try Out
Backend
Analysis
API Design
Mockup
API-Front
Implementation
API-Front
Design
Publish
Developer
Feedback
Design & Build
Try Out
Backend
Analysis
Faça a escolha
API
Gateway
API
Gateway
CodeGen
(server)
API Architect
API Developer
Backend ArchitectAPI Product Owner
Developer
Engagement
API Operator
A Equipe
Papéis - Planos
- Roadmap de APIs
- Modelo de negócio
- Identifica as APIs
- Desenha as interfaces
- Garante o DX
- Data-mapping
- Constrói o API-Front
- Apoia o API Architect na
análise bottom-up
- Publica as APIs
- Monitora o uso
- Configura políticas/alertas
- Onboarding dos App Dev
- Suporte para os App Dev
- Melhoria do portal
- Feedbacks para API PO
Business Analyst
- Apoia no entendimento do negócio
1
2
3
Aproveite ao máximo o poder
do legado para suas APIs
Escolha estratégias e
tecnologias adequadas
Monte um time multidisciplinar
e pense API-First
Obrigado!
Fábio Rosato
fabio.rosato@sensedia.com
@frosato
www.slideshare.net/frosato/
Expondo APIs de back-ends
legados e travados

Expondo APIs de back-ends legados e travados