Kleber 
Bacili 
kleber.bacili@sensedia.com 
@kleberbacili 
slideshare.net/kleberbacili 
10 
atributos 
de 
uma 
API 
de 
sucesso 
Do 
design 
RESTful 
e 
segurança, 
a 
formas 
de 
divulgação 
e 
engajamento
Kleber 
Bacili 
kleber.bacili@sensedia.com 
@kleberbacili 
Cerquilho
Agenda 
Contextualização 
Planejamento 
e 
Preparação 
Design 
e 
Construção 
Execução 
e 
Engajamento
Contextualizaçã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 
(*) 
Magic 
Quadrant 
for 
Integrated 
SOA 
Governance 
Technology 
Sets, 
2009
O 
Tempo 
todo 
com 
o 
usuário 
ComparMlhando 
tudo 
com 
todos 
The 
Nexus 
of 
Forces 
Inundação 
de 
dados 
e 
contexto 
Implantanto 
e 
rodando 
em 
algum 
lugar 
Source: 
Gartner 
(Jun/2012)
The 
Internet 
of 
Things
10 Atributos 
de 
uma 
API 
de 
sucesso
Plan 
& 
Prepare 
API 
Strategy 
Design 
& 
Build 
Run 
& 
Engage
Plan 
& 
Prepare 
API 
Strategy 
Design 
& 
Build 
Run 
& 
Engage 
Plan 
Prepare
As 
primeiras 
decisões 
de 
design…
Selecione 
a 
Tecnologia 
Adequada 
SOAP vs. REST
Selecione 
a 
Tecnologia 
Adequada 
XML vs. JSON
and the winners are… 
REST + JSON
1 Proposta 
de 
Valor
“Você 
pode 
até 
passar 
batom 
num 
porco, 
mas 
ele 
conOnuará 
sendo 
um 
porco!”
Plan 
& 
Prepare 
API 
Strategy 
Muitos 
projetos; 
Design 
Equipe 
& 
Build 
pequena 
Run 
& 
Engage 
Design 
Design 
& 
& 
Build 
Build
2 Design 
RESTful
REST 
RepresentaMonal 
State 
Transfer 
EsMlo 
arquitetural 
criado 
por 
Roy 
Fielding 
RESTful 
Design 
que 
respeita 
os 
conceitos 
REST
Coleção 
/pedidos! 
Resources 
Elemento 
/pedidos/{id}!
RPC? 
/getAccount! 
/getAllAccounts! 
/createDirectory! 
/updateGroupName! 
/findClientById!
GET 
POST 
PUT 
DELETE
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}! 
DELETE /users/98W3G32K01/photos!
GET! 
POST! 
PUT! 
DELETE! 
PATCH! 
Método 
para 
“Atualização 
parcial” 
PATCH /users/98W3G32K01 ! 
{! 
"email": "joao.silva@empresa.com"! 
} 
PATCH /pedidos/39009186! 
{! 
"status": "Cancelado"! 
}
3 Versionamento
THINGS 
CHANGE! 
v1 
v2 
v3 
v4 
v5 
v6 
v7
Versionamento 
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 
alternaMvas: 
• Twilio: 
/2010-­‐04-­‐01/Accounts/ 
• Salesforce.com: 
/services/data/v20.0/sobjects/Account
4 Error 
Handling
200! 
400! 
500! 
Resultado 
OK 
Erro 
no 
Client 
Erro 
no 
Server
STATUS 
OK 200!
Status 
& 
Error 
Codes 
200!!! 
400!!! 
500! 
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! 
}! 
]!
Status 
& 
Error 
Codes 
200!!! 
400!!! 
500! 
201 
Created 
POST /items/1234/bids ! 
{! 
"amount" : 602.99 ! 
} 
201 Created! 
Location: /items/1234/bids/100001 ! 
{! 
"amount" : 602.99,! 
"current_bid" : 510,! 
"winning" : true! 
} !
Status 
& 
Error 
Codes 
200!!! 
400!!! 
500! 
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! 
}!
Status 
& 
Error 
Codes 
200!!! 
400!!! 
500! 
Outros 
Comuns 
401! 
! 
403! 
404! 
! 
413! 
! 
429! 
Unauthorized 
Forbidden 
Not 
Found 
Request 
is 
too 
Large 
Too 
Many 
Requests
Status 
& 
Error 
Codes 
200!!! 
400!!! 
500! 
500 
Internal 
Server 
Error 
PUT /vendas/v1/pedidos/9940382! 
{! 
”status" : canceled ! 
} 
500 Internal Server Error! 
{! 
"status" : 500,! 
"message": ”Oops. Algo saiu errado”! 
} ! 
hMp://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Mais 
informações? 
Vídeo 
do 
Webinar 
hdp://downloads.sensedia.com/webinar-­‐design-­‐de-­‐apis-­‐resful
5 Segurança
v Acesso 
não 
autorizado 
v Ataques 
v Sobrecarga 
v Confidencialidade 
v Implementações 
desastradas 
de 
clients
v Acesso 
não 
autorizado 
v Ataques 
v Sobrecarga 
v Confidencialidade 
v Implementações 
desastradas 
de 
clients
þ Identificar App (?) 
þ Identificar Usuário (?) 
þ Identificar Device (?) 
Identidade e 
Autorização
HTTPS, 
sempre!
6 Hypermedia
Hypermedia 
APIs 
*POX 
= 
Plain 
Old 
XML, 
Richardson 
Maturity 
Model 
HATEOAS 
= 
Hypermedia 
as 
the 
Engine 
of 
ApplicaMon 
State
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" 
}! 
]! 
}
Plan 
& 
Prepare 
API 
Strategy 
Design 
& 
Build 
Muitos 
projetos; 
Run 
Run 
Run 
& 
& 
& 
Engage 
Equipe 
Engage 
Engage 
pequena
7 Developers 
Portal
Docs 
incompletos, 
desatualizados, 
estáOcos 
e 
com 
PDFs 
de 
100 
páginas
Gehng 
Started 
www.twilio.com/docs!
Documentação 
InteraOva 
desenvolvedores.extra.com.br!
Exemplos 
de 
código 
na 
linguagem 
do 
developer 
sendgrid.com/docs!
8 Self-­‐Service
Sign-­‐up 
e 
Tokens 
de 
acesso 
automáOcos 
stripe.com/docs!
REST 
Console 
ou 
Sandbox 
/ 
Playgroung 
dev.transparencia.org.br!
9 Confiabilidade
Bugs 
Confiabilidade 
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, 
Blog
Foruns 
de 
discussão 
e 
Abertura 
de 
Ockets 
desenvolvedores.extra.com.br!
10 Divulgação
Hackathon 
& 
Open 
InnovaOon
1 Apps 
criadas: 
300+ 
2 Developers 
cadastrados: 
800+ 
3 Tráfego: 
20M 
calls 
/ 
15 
dias 
4 Eleições 
mais 
transparentes!
Plan 
& 
Prepare 
API 
Strategy 
Design 
& 
Build 
Run 
& 
Engage
1 Proposta 
2 Design 
de 
Valor 
RESTful 
3 Versionamento 
4 Error 
Handling 
5 Segurança 
6 Hypermedia 
7 Developers 
8 Self-­‐Service 
9 Confiabilidade 
10 Divulgação 
Portal
www.linkedin.com/groups/API-­‐Web-­‐Services-­‐Brasil-­‐5000376 
www.meetup.com/API-­‐Craoers-­‐Brasil/
Kleber 
Bacili 
kleber.bacili@sensedia.com 
@kleberbacili 
slideshare.net/kleberbacili

10 Atributos de uma API de Sucesso