Post on 10-Oct-2020
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!