APIs bem desenhadas como
base para integrações
José Vahl
Gerente de Tecnologia
Ciclista, fotógrafo,
cervejeiro, gerente de
tecnologia e APIs addicted
jose.vahl@sensedia.com
@josevahl
Petterson Andrade
Arquiteto de Software
Palestrante, nerd,
arquiteto de software,
cruzeirense e confia na
tecnologia
petterson.andrade@sensedia.com
@pett4j
Applications Services
Enabling Digital Transformation
Quick Facts
Founded
in 2007
Campinas,
São Paulo,
Rio de Janeiro
and
US Incorporated
Strong SOA Background
(Gartner MQ SOA Gov, 2009)
+
● Services & API Strategy
● Architectural Solution
● API Platform
Agenda
Integração e evolução
Cenários de APIs
API First
Design de APIs
Mão na massa!
+
O Estado
Corrente das
Coisas
SOAP/XML
WS-*
Arquitetura de Serviços!
Legado ++
Integração!
Foco Total
Ênfase no
ESB
+
Arquitetura tradicional
ERPBillingCRM
ESB
(serviços)
Processos
Client
Aplicações
QualidadeeSegurança
GovernançaSOA
+
Novos elementos, novas abordagens...
Cloud
Mobilidade
Social
Analytics
Internet of
Things
Plataforma &
Ecossistema
Microservice
Connector-
less
Custom
Applications
CustomBillingERP
Aplicações
On Premise
Cloud
BillingCheckoutERP
ESB
(serviços)
Processos
Cliente
Aplicações
API
Gateway
QualidadeeSegurança
GovernançaSOA
Cloud
Mobilidade
Custom
Applications
CustomBillingERP
Aplicações
On Premise
Preocupações arquiteturais:
● Segurança
● Escalabilidade
● Limitações de banda
Social
Aplicações
BillingCRMERP
Social
Aplicações
BillingCRMERP
ProxyLayer
Monitoração
Unificação
da gestão de
chaves
Internet
of Things
Microservice #1 Microservice #2 Microservice #3 Microservice #4
Banco Relacional Banco Orientado
a Documentos
Key/Store Data
Base
Graph Database
HTTP HTTP HTTP HTTP
Microservice
Microservice
Microservice #1 Microservice #2 Microservice #3 Microservice #4
Banco Relacional Banco Orientado
a Documentos
Key/Store Data
Base
Graph Database
HTTP HTTP HTTP HTTP
API Gateway
HTTP HTTP HTTP HTTP
Service aggregation
Rate Limiting
Monitoring & Alerts
Authentication
Models
Policy Enforcement
Exception handling
Analytics on API
Consumption
Connector-
less
Adapter Adapter
Human Capital Supply Chain
HTTP HTTP HTTP HTTP
ERP CRM
Adapter
HTTP
Enterprise Resource
planning
HTTP
Enterprise
Performance
Connector-
less
Adapter
Human Capital Supply Chain
HTTP HTTP HTTP HTTP
API Gateway
Service aggregation
Rate Limiting
Monitoring & Alerts
Authentication
Models
Policy Enforcement
Exception handling
Analytics on API
Consumption
ERP CRM
Adapter
HTTP
Enterprise Resource
planning
HTTP
Enterprise
Performance
HTTP
Adapter
Uma avalanche de APIs
Arquitetura de Serviços!
Legado ++
Ênfase no
ESB
+
Formas de integração
Backend
APIs
The Digital Glue
Integrações com
Aplicações SaaS
Aplicações
Móveis
Internet
of Things
Inovação
Ecossistema
de Parceiros
Digitais
+
SSOCIAL
MMOBILE
AANALYTICS
CCLOUD
IoTINTERNET
OF THINGS
Transformações Digitais
Experiências digitais transformadas
Arquitetura de Serviços!
Legado ++
+
Cenários de uso das APIs
Inovação abertaPlataformas e
Ecossistemas
Clientes e Parceiros Múltiplos dispositivos
+
Plataformas e Ecossistemas
Planejamento de viagens”“
+
Clientes e Parceiros
Aproximação de
vendedores e compradores
“ ”
+
Clientes e Parceiros
Aproximação de
vendedores e compradores
“ ”
+
Múltiplos Dispositivos
Missão: Dar às pessoas
acesso a todas as músicas
que elas quiserem o tempo
todo, de forma simples e
legal.
“
”
+
Inovação Aberta
Aceleradora de Startups
focada em Apps para os
28M de usuários Nike
“
”
+
Multi-sided
Business Models
Platform
Power
Conceitos em comum
+
The Magnet:
- Design of Incentives
- Pricing Models
- Reputation Systems
The Matchmaker:
- Rich Data Collection
- Data-oriented Match
- Curation (the best and the
rest)
Gravity
Flow
Connection
The Toolbox:
- Simple
- Open
- Agile
+ API First
78%
+
Compromisso com APIs
“Anyone who doesn’t do this will be fired. Thank you; have a nice day!”
- Jeff Bezos
+
Foco na informação ou na integração?
● Serviços projetados para
uso interno
● Código Legado
● SOAP Services
● Tabelas de Banco
API
(design problemático)
Foco na
informação
Foco na
integração
info:
version: 0.0.1
title: My API História para
contar
+
Design despriorizado +
Visão de curto prazo
Com “APIs”
+
Design de
APIs info:
version: 0.0.1
title: My API
1966
Clint Eastwood
Lee Van Cleef
Eli Wallach
Sergio Leone
(Por um punhado de dólares e Por uns dólares a mais)
RESTSOAP vs.
JSONXML vs.
Valor RESTful Documentação Status
Codes
Otimização Hypermedia Segurança Instrum/zação
As primeiras decisões…
JSONREST +
And the winners are...
Muito confusa
?
Valor
Não “pegou”
http://www.infoq.com/news/2015/11/dropbox-deprecates-apis
778 Pokémon
248 Habilidades
?
Valor
778 Pokémon
248 Habilidades
?+55k calls / dia
Valor
“Você pode até passar batom num porco,
mas ele continuará sendo um porco!”
Foco no consumidor!
RESTful
REST
Representational State Transfer
Estilo arquitetural criado por Roy Fielding
RESTful
Design que respeita os conceitos REST
Coleção
/pedidos
Resources
Elemento
/pedidos/{id}
/getAccount
/getAllAccounts
/createDirectory
/updateGroupName
/findClientById
RPC?
URI: https://api.mycompany.com/name-of-api/resource
HTTP ou
HTTPS
Seu domínio Nome da API
(opcional)
Recursos e
Parâmetros
RESTful
GET POST PUT DELETE
Resource POST
(create)
GET
(read)
PUT
(update, create)
DELETE
(delete)
/pedidos Cria novo
pedido
Lista pedidos -- Apaga todos
os pedidos
/pedidos/3747 -- Mostra pedido
3747
Atualiza pedido
3747, se não
existir, cria
Apaga pedido
3747
RESTful
Método de Consulta
(Cachable, Safe, Idempotente)
GET /vendas/pedidos
GET /checklist/item/4
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
Método para “Criação”
(Unsafe, Não-Idempotente)
POST /clientes/98W33GJ201/enderecos
{
"endereco": "Av. Brigadeiro Faria Lima",
"numero": "3800",
"complemento": "18o. Andar",
"bairro": "Itaim Bibi",
"cidade": "São Paulo",
"estado": "SP",
"cep": "04538-132"
}
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
Método para “Atualização”
(Unsafe, Idempotente)
PUT /clientes/98W33GJ201/enderecos/1
{
"endereco": "Av. Brigadeiro Faria Lima",
"numero": "3800",
"complemento": "18o. Andar",
"bairro": "Itaim Bibi",
"cidade": "São Paulo",
"estado": "SP",
"cep": "04538-132"
}
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
Método para Remoção
(Unsafe, Idempotente)
DELETE /pedidos/98W33GJ201
DELETE /users/98S7726QV1/photos
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
Método para Atualização parcial
(Unsafe, Não-Idempotente)
PATCH /users/98W33GJ201
{
"email": "joao.silva@empresa.com"
}
PATCH /pedidos/39D0091B86
{
"status": "Cancelado"
}
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
OPTIONS
Quais métodos são permitidos?
OPTIONS /clientes
Allow: HEAD,GET,POST,OPTIONS
HEAD
Quero ver apenas o Header
HEAD /clientes
Date: …
Content-Type: application/json
Content-Length: 12345
Documentação
DocumentaçãoTHINGS
CHANGE!
v1
v2
v3
v4
Documentação
Versão
URI: https://api.mycompany.com/name-of-api/v2/resource
HTTP ou
HTTPS
Seu domínio Nome da API
(opcional)
Recursos e
Parâmetros
Outras alternativas:
• Twilio: /2010-04-01/Accounts/
• Salesforce.com: /services/data/v20.0/limits
Versionamento
Nunca quebre o cliente!!
UX
(Developer Experience)
DX
API Portal
Developers
https://developers.[you].com
Powered by
❖ Introdução, tutoriais e
exemplos de códigos
❖ Self-service Signup
❖ Documentação interativa
(API Browsing)
❖ Forum, Blog & Dev support
❖ Testes facilitados (Sandbox)
❖ Dev. Dashboard
API Developers Portal
Documentação
Documentação
Interativa
desenvolvedores.cnova.com
Getting
Started
www.twilio.com/api
Exemplos de
código na
linguagem
do developer
sendgrid.com/docs
Sign-up e Tokens
de acesso
automáticos
stripe.com/docs
REST Console ou
Sandbox / Playgroung
dev.transparencia.org.br
Hackathon & Open Innovation
Status Codes
200
400
500
Resultado OK
Erro no Cliente
Erro no Servidor
201 Criado
202 Aceito
401 Não Autorizado
405 Operação não permitida
413 Request muito grande
429 Muitas requisições
503 Servidor não disponível
204 Sem Conteúdo
STATUS OK 200
200
400
500
Status &
Error Codes
200 OK
GET /candidatos?estado=SP&partido=PP
200 OK
[
{
"id": "1532962",
"apelido": "PAULO MALUF",
"nome": "PAULO SALIM MALUF",
"numero": "1111",
"cargo": "Deputado Federal",
"estado": "SP",
"partido": "PP",
"reeleicao": true
}
]
200
400
500
Status &
Error Codes
201 Created
POST /items/1234/bids
{
"amount" : 602.99
}
201 Created
Location: /items/1234/bids/100001
{
"amount" : 602.99,
"current_bid" : 510,
"winning" : true
}
200
400
500
Status &
Error Codes
400 Bad Request
GET /candidatos
400 Bad Request
{
"status" : 400,
"code" : 40377,
"message" : "Parâmetro 'estado' não
pode ser nulo ou vazio"
"more" : https://dev.empresa.com/errors/40377
}
200
400
500
Status &
Error Codes
Outros Comuns
401
403
404
413
429
Unauthorized
Forbidden
Not Found
Request is too Large
Too Many Requests
200
400
500
Status &
Error Codes
500 Internal Server Error
PUT /vendas/v1/pedidos/9940382
{
”status" : canceled
}
500 Internal Server Error
{
"status" : 500,
"message": ”Oops. Algo saiu errado”
}
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Otimização
Filtros e
paginação
Callbacks
Caching
FiltrosGET /vendas/v2/pedidos?status=concluido
GET /pedidos/123AF15J?_fields=numero,data,valor
Busca com escopo (subconjuntos):
Respostas parciais:
GET /search?q=macbook+air
Busca Global:
Paginação
GET /pedidos?_offset=50&_limit=25
Recomendação:
Outras opções:
Linkedin:
Instagram:
?start=50&count=25
?min_id=3091&max_id=3245&count=25
Caching
Evite tráfego desnecessário
Latência de rede
Sobrecarga nos servidores
Atenção
❖ Tempo de invalidação do cache
❖ Sincronização em clusters
Já chegamos?
Já chegamos?
Já chegamos?
Já chegamos?
Já chegamos?
Stop Pooling Me
Marketplace API
❖ Consulta estoque
❖ Cálculo de frete
❖ Novo pedido recebido
https://api.mywebstore.com/v1/estoque
https://api.mywebstore.com/v1/frete
https://api.mywebstore.com/v1/pedido
Chamadas Reversas:
Hypermedia
*POX = Plain Old XML, Richardson Maturity Model
HATEOAS = Hypermedia as the
Engine of Application State
http://martinfowler.com/articles/richardsonMaturityModel.html
GET /items?q=macbook+air+new
{
"results" : [
{
"id" : 123,
"name" : "Macbook Air 2010 LIKE NEW",
"price" : "499"
}
]
}
SEM
Hypermedia
COM
Hypermedia
GET /items?q=macbook+air+new
{
"results" : [
{
"_links" : [
{"rel": "self","uri": "/items/123" },
{"rel": "bids","uri": "/items/123/bids" },
{"rel": "win","uri": "/items/123/bids?q=win" }
],
"name" : "Macbook Air 2010 LIKE NEW",
"price" : "499"
}
]
}
Segurança
❖ Acesso não autorizado
❖ Ataques
❖ Sobrecarga
❖ Confidencialidade
❖ Implementações
desastradas em clients
Acesso não autorizado Segurança baseada na obscuridade
A prova de hackers Canal inseguro (hijacking)
Níveis de
CRITICIDADE
Básico
Intermediário
Crítico
❖ Quanto você conhece
dos Client Apps?
❖ As APIs dão acesso a
informações sensíveis?
❖ As APIs alteram dados
importantes?
Básico
Intermediário
Crítico
❖ Quanto você conhece
dos Client Apps?
❖ As APIs dão acesso a
informações sensíveis?
❖ As APIs alteram dados
importantes?
API totalmente pública,
potencialmente centenas de
Apps externos
Alguns Apps externos de
parceiros bem conhecidos
Somente Apps desenvolvidos
pela própria empresa
Básico
Intermediário
Crítico
Registros médicos, transações
financeiras ou dados vitais ao
negócio
Informações sociais,
Internet das coisas
Informações acessórias não
relacionadas a usuários
❖ Quanto você conhece
dos Client Apps?
❖ As APIs dão acesso a
informações sensíveis?
❖ As APIs alteram dados
importantes?
Básico
Intermediário
Crítico
Todas as operações (inclusive
DELETEs) em elementos e
coleções de recursos
GETs e alguns POSTs e PUTs em
recursos não vitais
Somente GETs
❖ Quanto você conhece
dos Client Apps?
❖ As APIs dão acesso a
informações sensíveis?
❖ As APIs alteram dados
importantes?
Separation of
CONCERNS
Web API
FAÇAD
E
Segurança
❖ Agrupamento de elementos com
responsabilidades semelhantes
❖ Simplificação de regras de negócio
Separation of
CONCERNS
Autenticação
Autorização
Privacidade
Disponibilidade
Auditoria
Integridade
APIs
Web API
FAÇADEUsers Apps
Partners/
Developers
Your Backend
Users Apps
APIs
Autenticação
Autorização
Disponibilidade
Privacidade
Auditoria
Integridade
API Gateway
Partners/
Developers
Your Backend
Web API
FAÇADE
Autenticação /
Autorização
Privacidade
Integridade Disponibilidade
Auditoria
❖ Acesso não autorizado
❖ Ataque Força Bruta
❖ Roubo de Credenciais
❖ Session hijacking
❖ DDoS
❖ Buffer Overflow
❖ Injection (SQL, XML, JSON)
❖ Information Disclosure
❖ Man-in-the-middle e
Network Eavesdropping
❖ Data Scraping
❖ Injection (SQL, XML, JSON)
❖ Cross-site Scripting (XSS) e
Request Forgery (XSRF)
❖ Repudiação
❖ Compliance (PCI-DSS, HIPAA)
App Token Basic HTTP OAuth 2.0 OpenID
http://downloads.sensedia.com/webinar-seguranca-de-apis
Instrum/zação
Eat your own
Dog Food
Trace de calls,
Monitoramento,
Rate Limiting e
Alertas
Compreenda o
padrão de uso
das APPs e APIs
status.aws.amazon.com
Status Page,
Release Notes,
Blog
Foruns de discussão e
Abertura de tickets
desenvolvedores.catho.com.br
Instrum/zação
REST + PHP
+
Rest + PHP
+
Silex
- Está entre os mais rápidos micro
frameworks de REST PHP
- Baseado nos componentes
Symphony
- Boa documentação e bom suporte
da comunidade.
+
Slim
- Está entre os mais rápidos micro
frameworks de REST PHP
- Boa documentação
- Integrado com implementações de
terceiros
+
Lumen
- Baseado no Laravel
- Boa documentação
- Não tão rápido quanto o Slim ou
Silex
+
Phalcon
- O mais rápido dos frameworks
REST PHP
- Extremamente otimizado e modular
- Não tão rápido quanto o Slim ou
Silex
- Boa documentação
Api na prática
Backend
APIs
The Digital Glue
Integrações com
Aplicações SaaS
Aplicações
Móveis
Internet
of Things
Aplicações
Web
Ecossistema
de Parceiros
Digitais
+
A mudança
Belo Horizonte Campinas
+
Visão de negócio
- Hub mudanças
- Juntar as duas pontas:
- Clientes
- Transportadoras
- Compartilhar mudanças / cargas
- Economia compartilhada
- Legislação
- Mercado estabelecido
- Barreira de entrada: Base de usuários
+
Oportunidades e Desafios
- API como estratégia fundamental
- Api com foco no cliente: Clientes
acessando apps
- Api com foco no parceiro: Transportadoras
e donos de caminhões
- Múltiplos dispositivos
+
Estratégia de API First
Code!
Swagger
+
Swagger
+
Geração de Sdk/Client
+
Geração do API Front
+
Postman
+
Mock / Server
+
Carregar Swagger no API Suite
+
Ionic
+
Take Away
A integração do seu sistema
deve ser pensada a partir do
dia zero!
APIs estão nas
agendas e no dia a dia
Quanto mais você
investir no desenho das
APIs, mais atalhos
poderá pegar no futuro

PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações