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

Post on 10-Oct-2020

1 views 0 download

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

www.tail.digital

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

com escalabilidade e segurança

Fernando Babadopulos@babadopulos

2017- @babadopulos www.tail.digital

motivação

FRONT-ENDBACK-ENDANÁLISEDENEGÓCIO

2017- @babadopulos www.tail.digital

motivação

MANTERASAPISATUALIZADAS

2017- @babadopulos www.tail.digital

motivação

FUTUREPROOF

2017- @babadopulos www.tail.digital

api first

VANTAGENS

2017- @babadopulos www.tail.digital

api first

CORE APIs

DASHBOARD

SISTEMASINTERNOS

APLICAÇÕESEXTERNAS

2017- @babadopulos www.tail.digital

api first

CORE API

DASHBOARD

SISTEMASINTERNOS

APLICAÇÕESEXTERNAS

CORE

APIs

DASHBOARD

SISTEMASINTERNOS

APLICAÇÕESEXTERNAS

2017- @babadopulos www.tail.digital

mock

MOCKSERVER

FRONT-END BACK-END

ANÁLISEDENEGÓCIO

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 }")

);

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

2017- @babadopulos www.tail.digital

Login/Senha

OAUTH

HMAC + Tokens

autenticação

2017- @babadopulos www.tail.digital

autenticação

Aplicaçãodeterceiro

{API}

autenticarousuárioeaaplicaçãodeterceiro

2017- @babadopulos www.tail.digital

autenticação

UsuárioUsernamePassword

Application IDApplication Secret

Aplicaçãodeterceiro

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":"user@example.com","utcTimestamp":1481252820

}}

autenticação

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

2017- @babadopulos www.tail.digital

Sempre utilizeSSLem suas APIS.

Não redirecione chamadas httpparahttps.

segurança

2017- @babadopulos www.tail.digital

verbos http

POST GET PUT PATCH DELETE

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

2017- @babadopulos www.tail.digital

Aproveite os códigos HTTP!

códigos de retorno

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

}

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

}

2017- @babadopulos www.tail.digital

200

códigos de retorno

OK

2017- @babadopulos www.tail.digital

404

códigos de retorno

Not Found

2017- @babadopulos www.tail.digital

503

códigos de retorno

ServiceUnavailable

2017- @babadopulos www.tail.digital

418

códigos de retorno

I’m ateapot

2017- @babadopulos www.tail.digital

json

{API}POST JSON RESPONSE JSON

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”

}

2017- @babadopulos www.tail.digital

Teste unitáriovs

Teste de integração

testando a api

2017- @babadopulos www.tail.digital

2017- @babadopulos www.tail.digital

teste com docker

$docker-compose up

2017- @babadopulos www.tail.digital

docker-compose

2017- @babadopulos www.tail.digital

documentação

2017- @babadopulos www.tail.digital

auto coding

2017- @babadopulos www.tail.digital

java client

2017- @babadopulos www.tail.digital

sandbox

Facilite a vida do desenvolvedorque vai consumir a sua API.

2017- @babadopulos www.tail.digital

deploy

{API}:8080 {API}:8081

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;}

}}

2017- @babadopulos www.tail.digital

monitoramento

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

2017- @babadopulos www.tail.digital

escalabilidade

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

AWSLOADBALANCER

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;

}}

}

www.tail.digital

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

com escalabilidade e segurança

Fernando Babadopulos@babadopulos

OBRIGADO!