O documento discute os principais aspectos de uma arquitetura RESTful para APIs, incluindo recursos, operações HTTP, versionamento, status de resposta, filtros, paginação, caching, callbacks e segurança. O palestrante também apresenta suas credenciais e canais de contato.
2. Quem sou?
Daniel Satiro da Rocha
− Tecnólogo em Sistemas para Internet
− Bacharel em Sistemas de Informção
− Especialista em Gestão de TI
Atualmente atuo como desenvolvedor
especialista de sistemas para internet
4. Arquitetura
APIs são fieis tais como ao estilo arquitetural
REST baseadas no protocolo HTTP definido
pelos sequintes aspectos:
− Uma URI tal como
https://api.meudominio.com/api/v1/clientes
− Um media type que define os elementos de
dados de transição de estado (JSON, XML,
Atom)
− Métodos HTTP (ex: GET, PUT, POST e
DELETE)
5. Recursos
É a abstração de uma informação
(normalmente entidades de negócio)
gerenciada por uma aplicação. O recurso
apresenta uma coleção onde cada elemento
possui um identificador único.
Devem ser um substativo no plural, não um
verbo
− /carros
− /clientes
− /produtos/{id}
6. Recursos
Nunca nomeie recursos dessa forma:
− /obterClientes
− /clientes/atualizar
Mapa de relações utilizando sub-recursos
− /produtos/{id}/avaliacoes
− /produtos/{id}/avaliacoes/{id}
7. Versionamento
Implemente controle de versão na URI antes dos
recursos e exponha apenas o seu major version.
− https://api.meudominio.com/bebidas/v1/cervejas
− https://api.meudominio.com/bebidas/v2/cervejas
− https://api.meudominio.com/bebidas/v1/sucos
− https://api.meudominio.com/bebidas/v2/sucos
Versões major são versões que não mantem
retrocompatibilidade com os consumidores existentes.
Portanto, evolua para novas versões com cautela.
Versionamentos menores podem ser feitos, mas não
devem causar impacto nos consumidores.
8. Operações
Verbo Caminho CRUD Descrição
GET /produtos Lista (index) Retorna uma coleção
GET /produtos/{id} Read Retorna um determinado elemento da
coleção
POST /produtos Create Cria um elemento na coleção
PUT /produtos/{id} Update Atualiza um determinado elemento da
coleção
PATCH /produtos/{id} Partial update Atualiza parcialmente um determinado
elemento de uma coleção Análogo ao
PUT, no entanto permite utilizar na
requisição apenas atributos ao quais
deseja-se alterar
DELETE /produtos/{id} Delete Exclui toda uma coleção (/produtos) ou
um determinado elemento da mesma
9. HTTP Status code - 2xx
SUCCESSFUL DESCRIÇÃO EXEMPLO
200 Ok Status genérico de sucesso GET /clientes/123
200 Ok
{“nome”: “Fulano”}
201 Created Indica a criação de um recurso.
Normalmente utilizado para responder a
requisições de POSTs
POST /clientes
201 Created
Location: /clientes/123
202 Accepted Indica que a requisição foi “aceita” para
processamento. Normalmente utilizadas
em chamadas assincronas
POST /pedidos
202 Accepted
Location: /pedidos/1234
204 No Content Indica a execução com sucesso de uma
operação que não retornará informação.
Normalmente utilizada como resposta do
PUT, PATCH e DELETE
DELETE /clientes/123
204 No Content
10. HTTP Status code - 4xx
CLIENT ERROR DESCRIÇÃO EXEMPLO
400 Bad Request Status genérico de erro para
requisições que não puderam ser
processadas devido ao seu formato
não aderente ao media-type
POST /clientes
400 Bad Request
{“message”: “Requisição mal
formatada”}
401 Unauthorized Não reconhecido por falta de
credencial válida para o recurso
solicitado
GET /clientes/342
401 Unauthorized
{“message”: “Necessário estar
autenticado”}
403 Forbidden Credencial sem privilégios suficientes
para acessar o recurso que está
solicitando
GET /clientes/342
403 Forbidden
{“message”: “Acesso negado”}
404 Not Found URI informada na requisição não
existe
GET /clientes/912
404 Not Found
{“message”: “Não encontrado”}
405 Method not
allowed
O método HTTP utilizado no recurso
não é permitido
DELETE /clientes
405 Method not allowed
{“message”: “Método não permitido
para este recurso”}
11. HTTP Status code - 4xx
CLIENT ERROR DESCRIÇÃO EXEMPLO
412 Precondition
Fail
Algo na requisição não esta aderente
ao esperado
POST /clientes
412 Precondition Fail
{“message”: “Atributos obrigatórios não
informadaos”}
413 Entity Too
Large
O limite de dados que oservidor é
capaz de processar foi excedido
POST /clientes
413 Entity Too Large
{“message”: “Volume de dados
excedido”}
415 Unsupported
Media Type
O payload esta em formato que o
servidor não reconhece. As vezes é
resolvido com os atributos Content-
Type ou Content-Encoding
PUT /clientes/342
415 Unsupported Media Type
{“message”: “Media type inálido”}
422 Unprocessable
Entity
Ocorreu algum erro de negócio.
Sintaticamente correto.
Semanticamente não.
POST /clientes
422 Unprocessablle Entity
{“message”: “Cliente já existente”}
429 Too Many
Requests
O servidor esta limitando o seu
acesso por que você atingiu o limite
máximo de requisições
GET /clientes/123
429 Too Many Requests
{“message”: “Limite máximo de
requisições no periodo foi excedido”}
12. HTTP Status code - 5xx
SERVER ERROR DESCRIÇÃO EXEMPLO
500 Internal
Server Error
A requisição esta certa, porém
algum erro aconteceu no servidor.
Não adianta enviar de novo agora
GET /clientes?ativos
500 Internal Server Error
{“message”: “Ooops. Algo deu
errado”}
502 Bad Gateway O API Gateway não conseguiu
identificar exatamente o “erro”
reportado pelo backend
GET /clientes/342
502 Bad Gateway
{“message”: “O gateway
recebeu uma resposta inválida
do servidor ao tentar atender a
solicitação”}
503 Service
Unavailable
O servidor não consegue
processar agora por sobrecarga
ou manutenção
GET /clientes/342
503 Service Unavailable
{“message”: “O servidor não
consegue processar agora.
Tente mais tarde”}
13. Filtros e paginação
Os mecanismos de filtro e paginação são utilizados em
pesquisas (método GET) com o intuito de otimizar resultados
com base em um conjunto de dados. A paginação limita a
quantidade de registros no retorno de uma chamada. Já os
filtros auxiliam na seleção de registros com as informações
desejadas.
− GET /clientes?_offset=2&_limit=10
− GET /clientes?ativo=true
14. Caching
Essa estratégia permite reduzir o tráfego
desnecessário, latência de rede e sobrecarga
nos servidores que provém as Apis.
Importante ter um tempo de expiração e/ou
uma trigger de atualização dos dados quando
os mesmos sofrerem alterações.
15. Callback
Utilizado em recursos assincronos para
informar ao consumidor o término de um
procedimento. Normalmente utilizado onde o
processamento de uma determinada instrução
é custosa e o tempo de resposta não é rápido.
16. Hypermedia
Conhecido como HATEOAS (Hypertext as the engine
of application state), provê hyperlink nas respostas
das operações para possibilitar a navegação dinâmica
em outras interfaces da API.
GET /clientes/123/contas?tipo=poupanca
200 Ok
{
"id": "123", "saldo": "0",
"links": {
{"ref": "self", "type": "GET",
"href": "/clientes/123/depositos"}
}
}
17. Segurança
Mantenha a API segura, avalie o nivel de criticidade e
adote a estratégia adequada como por exemplo
autenticação, autorização, criptografia, etc. Sempre
leve em consideração os seguintes atributos.
− Autenticação/Autorização
− Privacidade
− Auditoria
− Integridade
− Disponibilidade
E lembre-se, o elo mais fraco de toda estratégia de
segurança sempre é o ser humano