Kleber Bacili
kleber.bacili@sensedia.com @kleberbacili
slideshare.net/kleberbacili
10 atributos de uma
API de sucesso
Do design RESTful e segurança,
Kleber Bacili
kleber.bacili@sensedia.com @kleberbacili
Agenda
Contextualização
Planejamento e Preparação
Design e Construção
v
Design, Exposição, Gerenciamento
e Engajamento em APIs
v
Headquarter em Campinas,
escritórios em Sampa, Rio e Philly
v
Classificados como Visionários no
Quadrante Mágico do Gartner
O Tempo todo
com o usuário
ComparMlhando
tudo com todos
Inundação de dados
e contexto
Implantanto e rodando
em algum lugar
Source: Gartner (Jun/2012)
The Nexus
of Forces
The Internet
of Things
10
Atributos de uma
API de sucesso
API
Strategy
Plan & Prepare Design & Build Run & EngageAPI
Strategy
Plan & Prepare Design & Build Run & EngagePlan &
Prepare
Selecione a Tecnologia Adequada
REST
Selecione a Tecnologia Adequada
JSON
and the winners are…
“Você pode até passar batom num porco,
mas ele conOnuará sendo um porco!”
API
Strategy
Plan & Prepare Design & Build Run & Engage Design & BuildMuitos
projetos;
Equipe
pequena
Design &
Build
REST
RepresentaMonal State Transfer
EsMlo arquitetural criado por Roy Fielding
RESTful
Coleção
/
pedidos!
Resources
Elemento
/getAccount!
/getAllAccounts!
/createDirectory!
/updateGroupName!
/findClientById!
RPC?
Método de Consulta
GET
/vendas/pedidos!
GET
/checklist/item/4!
GET!
POST!
PUT!
DELETE!
PATCH!
Método para “Criação”
POST
/clientes/98W3G32K01/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!
GET!
POST!
PUT!
DELETE!
PATCH!
Método para “Atualização”
PUT
/clientes/98W3G32K01/enderecos/1!
{!
"endereco":
"Av. Brigadeiro Faria Lima",!
"numero":
"3820",!
"complemento":
"19o. Andar",!
"bairro":
"Itaim Bibi",!
"cidade":
"São Paulo",!
"estado":
"SP",!
"cep":
"04538-132"!
}
GET!
POST!
PUT!
DELETE!
PATCH!
Método para “Remoção”
DELETE
/pedidos/{id}!
GET!
POST!
PUT!
DELETE!
PATCH!
Método para “Atualização parcial”
PATCH
/users/98W3G32K01 !
{!
"email":
"joao.silva@empresa.com"!
}
PATCH
/pedidos/39009186!
{!
"status":
"Cancelado"!
}
v1
v2
v3
v4
v5
v6
v7
THINGS
CHANGE!
Versionamento
Versão
URI:
https://api.mycompany.com/name-of-api/v2/resource!
HTTP ou
HTTPS
Seu domínio
Nome da API
(opcional)
Parâmetros
Recursos e
Outras alternaMvas:
• Twilio: /2010-‐04-‐01/Accounts/
200!
400!
500!
Resultado OK
Erro no Client
Erro no Server
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”! } !
Mais informações?
Vídeo do Webinar
v
Acesso não autorizado
v
Ataques
v
Sobrecarga
v
Confidencialidade
v
Implementações
v
Acesso não autorizado
v
Ataques
v
Sobrecarga
v
Confidencialidade
v
Implementações
þ
Identificar App (?)
þ
Identificar Usuário (?)
þ
Identificar Device (?)
Identidade e
Autorização
Hypermedia APIs
*POX = Plain Old XML, Richardson Maturity Model
HATEOAS = Hypermedia as the
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"
}! ]! }
API
Strategy
Plan & Prepare Design & Build Run &Engage Engage Run &
Muitos
projetos;
Equipe
pequena
Run &
Engage
Docs incompletos, desatualizados,
estáOcos e com PDFs de 100 páginas
Gehng
Started
Documentação
InteraOva
Exemplos de
código na
linguagem
do developer
Sign-‐up e Tokens de
acesso automáOcos
REST Console ou
Sandbox / Playgroung
Confiabilidade
Bugs
Problemas de
Performance
Indisponibilidade
Mudanças
(não-‐planejadas)
Falta de
Suporte
www.sensedia.com/br!
Trace de calls,
Monitoramento,
Rate LimiOng e
Alertas
status.aws.amazon.com!
Status Page,
Release Notes,
Foruns de discussão
e Abertura de Ockets
1
Apps criadas: 300+
2
Developers cadastrados: 800+
3
Tráfego: 20M calls / 15 dias
API
Strategy
Plan & Prepare Design & Build Run & EngageDesign RESTful
2
1
Proposta de Valor
3
Versionamento
4
Error Handling
5
Segurança
7
Developers Portal
6
Hypermedia
8
Self-‐Service
9
Confiabilidade
10
Divulgação
Kleber Bacili
kleber.bacili@sensedia.com @kleberbacili