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

Preview:

Citation preview

APIs bem desenhadas como base para integrações

José VahlGerente de Tecnologia

Ciclista, fotógrafo, cervejeiro, gerente de

tecnologia e APIs addicted

jose.vahl@sensedia.com@josevahl

Petterson AndradeArquiteto de Software

Palestrante, nerd, arquiteto de software, cruzeirense e confia na

tecnologia

petterson.andrade@sensedia.com@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": "joao.silva@empresa.com"}

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

Recommended