REST APIs
William Bruno
Desenvolvedor NodeJS
http://wbruno.com.br/
http://github.com/wbruno
wbrunom@gmail.com
@wbrunom
APIs REST escaláveis
1.Aplicação
2.Plataforma
3.Desenvolvimento
Facilidade de extender
Maior throughput com
baixo tempo de resposta
Replicável, automatizado, confiável
be REST
https://imasters.com.br/desenvolvimento/definicao-restricoes-e-beneficios-
modelo-de-arquitetura-rest/
1. Client-Server
2. Stateless
3. Cacheable
4. Uniform Interface
5. Layered System
6. Code On Demand
1
HTTP methods: [GET, POST, PUT, PATCH, DELETE, etc..]
HTTP Status Code [200, 201, 204, 400, 409, 422, etc]
Endpoints: [plural, hífen]
be REST
https://tools.ietf.org/html/rfc2616
1
Nível 0: Samba do criolo doido
Nível 1: Endpoints bem definidos
Nível 2: Uso correto do protocolo
Nível 3: HATEOAS
be RESTful
https://imasters.com.br/apis/restful-api-melhores-praticas/
níveis de maturidade
1,2
Configs/Libs (DRY)
package.json
“main”: “index.js",
"devDependencies": {
"eslint": "^4.7.2",
"eslint-config-blz": "git+ssh://git@github.com/belezanaweb/eslint-config-blz.git",
"nyc": "^11.2.0",
"nyc-config-blz": "git+ssh://git@github.com/belezanaweb/nyc-config-blz.git"
},
"dependencies": {
"node-config": "git+ssh://git@github.com/belezanaweb/node-config.git"
}
3
Auto scaling
Latência

(UNIX) Load Average

% de CPU

etc
Depende da aplicação
1
Sidekicks
Definições de arquitetura

Autenticação/Autorização
Banco de dados correto (MongoDB, SQL, ElasticSearch, etc)
RabbitMQ
Uso de cache
2
Cache
Redis (cache distribuido)
Memória
NGINX proxy cache

Browser
(onde?) depende da regra de negócio
https://github.com/wbruno/examples/tree/gh-pages/nodejs-in-production
2
tools/services
2,3
Monólito: 1 ou 2 máquinas
Microsserviços: 23 APIs diferentes, 46
máquinas (ou mais), 23 LBs ou mais.

Micro Services
https://www.thoughtworks.com/pt/insights/blog/microservices-nutshell
2
Monólito: 1 ou 2 máquinas
Microsserviços: 23 APIs diferentes, 46
máquinas (ou mais), 23 LBs ou mais.

Micro Services
https://www.thoughtworks.com/pt/insights/blog/microservices-nutshell
2
Design Patterns
SOLID
DRY/DIE

KISS

YAGNI (worse is better)
Bad smell
1,2,3
http://wbruno.com.br/php/boas-praticas-de-programacao-filosofias-de-desenvolvimento/
Inception
Bibliografia
https://imasters.com.br/desenvolvimento/definicao-restricoes-e-beneficios-
modelo-de-arquitetura-rest/
https://tools.ietf.org/html/rfc2616

https://imasters.com.br/apis/restful-api-melhores-praticas/
https://github.com/wbruno/examples/tree/gh-pages/nodejs-in-production
Obrigado

APIs REST escaláveis