14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação...

38
www.tail.digital Desenvolvendo APIs públicas: exposição de serviços com escalabilidade e segurança Fernando Babadopulos @babadopulos

Transcript of 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação...

Page 1: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

www.tail.digital

Desenvolvendo APIs públicas:exposição de serviços

com escalabilidade e segurança

Fernando Babadopulos@babadopulos

Page 2: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

motivação

FRONT-ENDBACK-ENDANÁLISEDENEGÓCIO

Page 3: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

motivação

MANTERASAPISATUALIZADAS

Page 4: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

motivação

FUTUREPROOF

Page 5: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

api first

VANTAGENS

Page 6: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

api first

CORE APIs

DASHBOARD

SISTEMASINTERNOS

APLICAÇÕESEXTERNAS

Page 7: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

api first

CORE API

DASHBOARD

SISTEMASINTERNOS

APLICAÇÕESEXTERNAS

CORE

APIs

DASHBOARD

SISTEMASINTERNOS

APLICAÇÕESEXTERNAS

Page 8: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

mock

MOCKSERVER

FRONT-END BACK-END

ANÁLISEDENEGÓCIO

Page 9: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

mock

http://www.mock-server.com/new MockServerClient("127.0.0.1", 1080)

.when(request()

.withMethod("POST")

.withPath("/login")

.withBody(exact("{username: 'foo', password: 'bar'}"))).respond(

response().withStatusCode(200).withHeaders(

new Header("Content-Type", "application/json; charset=utf-8"),).withBody("{ code: 200 }")

);

Page 10: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

URL:GET/api/v3/users/10

CustomRequestHeader:GET/api/users/10”api-version: 3”

AcceptHeader:GET/api/users/10”Accept:application/vnd.mycompany.api.v3+json”

versionamento

Page 11: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

Login/Senha

OAUTH

HMAC + Tokens

autenticação

Page 12: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

autenticação

Aplicaçãodeterceiro

{API}

autenticarousuárioeaaplicaçãodeterceiro

Page 13: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

autenticação

UsuárioUsernamePassword

Application IDApplication Secret

Aplicaçãodeterceiro

Page 14: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

HMAC: Hash-based Message Authentication Code

/api/v3/security/authenticate?hmac={HMAC}

POST:{

"credential":{"applicationId":"a8e6db30-xxxx-xxxx-xxxx-xxxxxxxc9a66”"username":"[email protected]","utcTimestamp":1481252820

}}

autenticação

Page 15: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

SALTED_SECRET=sha512(password)+applicationSecret

HMAC=hash_hmac_sha1(SALTED_SECRET,POST)

/api/v3/security/authenticate?hmac={HMAC}

RETURN:{

"status": 200,"message": ”ok","accessToken": "fe13xxxx-xxxx-xxxx-xxxx-xxxxd69f7834”

}

autenticação

Page 16: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

Sempre utilizeSSLem suas APIS.

Não redirecione chamadas httpparahttps.

segurança

Page 17: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

verbos http

POST GET PUT PATCH DELETE

curl -X GET https://example.com/api/v3/something

Page 18: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

Aproveite os códigos HTTP!

códigos de retorno

{"code":200,"message":"ok","data":[…]

}

{"code":404,"message":"notfound","data":[]

}

Page 19: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

200

códigos de retorno

OK

Page 20: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

404

códigos de retorno

Not Found

Page 21: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

503

códigos de retorno

ServiceUnavailable

Page 22: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

418

códigos de retorno

I’m ateapot

Page 23: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

json

{API}POST JSON RESPONSE JSON

Page 24: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

limite o retorno de sua API

?fields=id,description,size,color

{"id":1597,"description":"T-Shirt","size":"medium","color":"orange”

}

Page 25: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

Teste unitáriovs

Teste de integração

testando a api

Page 26: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

Page 27: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

teste com docker

$docker-compose up

Page 28: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

docker-compose

Page 29: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

documentação

Page 30: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

auto coding

Page 31: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

java client

Page 32: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

sandbox

Facilite a vida do desenvolvedorque vai consumir a sua API.

Page 33: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

deploy

{API}:8080 {API}:8081

Page 34: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

deploy

{API}:8080 {API}:8081

http {upstream app_pool {

server localhost:8080fail_timeout=1m;server localhost:8081fail_timeout=1m;

}server {

listen 80;location / {

proxy_pass http://app_pool;}

}}

Page 35: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

monitoramento

Quanto mais sucesso tiver a sua API,mais sistemas você pode quebrar!

Page 36: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

escalabilidade

{API}:8080 {API}:8081 {API}:8080 {API}:8081 {API}:8080 {API}:8081

AWSLOADBALANCER

Page 37: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

2017- @babadopulos www.tail.digital

limitando as requisições

{API}:8080 {API}:8081

http {limit_req_zone $binary_remote_addr zone=one:10mrate=1r/s;upstream app_pool {

server localhost:8080fail_timeout=1m;server localhost:8081fail_timeout=1m;

}server {

listen 80;location / {

limit_req zone=oneburst=5;proxy_pass http://app_pool;

}}

}

Page 38: 14 a 16 de dezembro - DesenvolvendoAPIs públicas ......2017 -@babadopulos autenticação Aplicação de terceiro {API} autenticar o usuário e a aplicação de terceiro 2017 -@babadopulos

www.tail.digital

Desenvolvendo APIs públicas:exposição de serviços

com escalabilidade e segurança

Fernando Babadopulos@babadopulos

OBRIGADO!