PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
Transcript of PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
APIs bem desenhadas como base para integrações
José VahlGerente de Tecnologia
Ciclista, fotógrafo, cervejeiro, gerente de
tecnologia e APIs addicted
[email protected]@josevahl
Petterson AndradeArquiteto de Software
Palestrante, nerd, arquiteto de software, cruzeirense e confia na
tecnologia
[email protected]@pett4j
Applications Services Enabling Digital Transformation
Quick Facts
Foundedin 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/XMLWS-*
Arquitetura de Serviços!Legado ++
Integração! Foco Total
Ênfase no ESB
+
Arquitetura tradicional
ERPBillingCRM
ESB(serviços)
Processos
Client
Aplicações
Qu
alidad
e e Seguran
ça
Go
vernan
ça SOA
+
Novos elementos, novas abordagens...
Cloud
Mobilidade
Social
Analytics
Internet of Things
Plataforma & EcossistemaMicroservice
Connector-less
Custom Applications
CustomBillingERPAplicaçõesOn Premise
Cloud
BillingCheckoutERP
ESB(serviços)
Processos
Cliente
Aplicações
API Gateway
Qu
alidad
e e Seguran
ça
Go
vernan
ça SOA
Cloud
Mobilidade
Custom Applications
CustomBillingERPAplicaçõesOn Premise
Preocupações arquiteturais:● Segurança● Escalabilidade● Limitações de banda
Social
Aplicações
Billing
CR
ME
RP
Social
Aplicações
Billing
CR
ME
RP Pr
oxy
Laye
r
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 aggregationRate Limiting Monitoring & AlertsAuthentication Models Policy EnforcementException handlingAnalytics 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 aggregationRate Limiting Monitoring & AlertsAuthentication Models Policy EnforcementException handlingAnalytics 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
APIsThe 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
ConnectionThe 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:
vers
ion: 0
.0.1
titl
e: My
API História para contar
+
Design despriorizado + Visão de curto prazo
Com “APIs”
+ Design de APIs inf
o:
vers
ion: 0
.0.1
titl
e: My
API
1966
Clint EastwoodLee Van CleefEli Wallach
Sergio Leone(Por um punhado de dólares e Por uns dólares a mais)
RESTSOAP vs.
JSONXML vs.
Valor RESTful Documentação StatusCodes
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
RESTRepresentational State TransferEstilo 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 eParâ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": "[email protected]"}
PATCH /pedidos/39D0091B86{ "status": "Cancelado"}
GET
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
OPTIONSQuais métodos são permitidos?
OPTIONS /clientesAllow: HEAD,GET,POST,OPTIONS
HEADQuero ver apenas o Header
HEAD /clientesDate: …Content-Type: application/jsonContent-Length: 12345
Documentação
DocumentaçãoTHINGS CHANGE!
v1
v2v3
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 eParâmetros
Outras alternativas:• Twilio: /2010-04-01/Accounts/ • Salesforce.com: /services/data/v20.0/limits
VersionamentoNunca 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 PortalDocumentaçã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 Autorizado405 Operação não permitida413 Request muito grande429 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 CreatedLocation: /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
CachingEvite 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" } ]}
SEMHypermedia
COMHypermedia
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íticoRegistros 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íticoTodas 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 ofCONCERNS
Web APIFAÇAD
E
Segurança❖ Agrupamento de elementos com
responsabilidades semelhantes
❖ Simplificação de regras de negócio
Separation ofCONCERNS Autenticação
Autorização
Privacidade
Disponibilidade
Auditoria
Integridade
APIs
Web API
FAÇADEUsers Apps
Partners/Developers
Your Backend
Users Apps
APIs
AutenticaçãoAutorizaçãoDisponibilidadePrivacidadeAuditoriaIntegridade
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 ownDog 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
APIsThe 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