Prévia do material em texto
API Restful
Aprendendo conceitos REST
Antes de programar uma API Restful
em nodejs, vamos entender alguns
conceitos!
API
Interface de Programação de
Aplicações
Conjunto de padrões, rotinas e
instruções de programação
que permite que aplicações
diferentes se conectem.
APP(A)
APP(B)
API
Um exemplo de sistema que
utiliza API são os sistemas
operacionais, pois os
diferentes programas
instalados podem executar
uma mesma tarefa(ler um
arquivo), chamando funções
do SO por meio de uma
interface, no Windows é
conhecida por WinAPI e no
Linux é conhecida por SysCall
programas
aplicativos
kernel(núcleo)
SO
API SO
endpoint endpoint
endpoints
APIs fornecem um ou mais
pontos de acesso(endpoints)
para estabelecer a
comunicação entre uma
aplicação e a API de aplicação
externa. Pode ser a chamada
de funções de bibliotecas
específicas, no caso do
Sistemas Operacionais
Aplicação
API
endpoint
http uri
APP(cliente)
API
uri
API web
Lembrando que uma API pode
usar como meio de
comunicação o protocolo http ,
desta forma os endpoints
utilizados serão as URIs e
métodos( get, post,... )
associado a requisição do
protocolo para obtenção de
uma resposta
res
req
res
req
Uma dificuldade enfrentada
para esse tipo de abordagem é
que os desenvolvedores da
aplicação cliente devem
aprender a construir as
requisições para a API e se não
houver documentação clara
e/ou uma padronização nas
requisições, isso pode
torna-se um grande desafio
APP(cliente)
API
uri
res
req
uri
res
req
uri
res
req
uri
res
req
Desta forma,
utilizamos estratégias
que permitam
estruturar uma
solução para
implementação de
uma API
Uma dessas soluções é a REST , é um
estilo de desenvolvimento que
significa REpresentational State
Transfer
Transferência de Estado
Representativo
Um conjunto de critérios para
padronização da comunicação entre
aplicações que se utilizam do
protocolo http
Recurso
Na prática, REST estabelece
práticas para identificação e
definição dos conjuntos de
dados gerenciados pelo
sistema (clientes, vendas,
produtos, …), este conjunto é
denominado como recurso .
API Restful é então uma API Web que
está em conformidade com os critérios
REST !
QUAIS SÃO OS CRITÉRIOS
REST ?
http
1° critério
Desacoplamento cliente/servidor
Ter uma arquitetura
cliente/servidor formada por
clientes, servidores e recursos,
gerenciando suas solicitações de
forma independente , permitindo
que mudanças ocorram sem
impacto nas outras camadas
APP.v1(cliente)
APP(servidor)
API/REST
resreq http
APP.v2(cliente)
APP(servidor)
API/REST
resreq
2° critério
Comunicação stateless
Cada solicitação deve conter todos os
dados necessários para que seja
atendida. Reduzindo a necessidade de
recursos físicos, como memória e disco,
para manter informações dos clientes
entre requisições, aumentando a
escalabilidade .
3°critério
Armazenamento em cache
Estrutura computacional para
armazenar dados acessados
frequentemente. Quando possível,
os recursos devem ser
armazenados em cache pelo
cliente ou servidor, melhorando
performance e escalabilidade.
Tipos de caches: navegadores,
proxy, gateway, CDN, proxy
reverso e balanceadores de carga
APP(cliente)
API/REST
resreq
APP(cliente)
API/REST
resreq
cache cache
4° critério
Interface Uniforme
Um contrato para a comunicação
entre essas partes deve ser
estabelecido. Para isso, há quatro
princípios a serem seguidos:
Interface Uniforme: 1° Princípio
Identificação dos recursos
Este princípio busca padronizar os
endpoints(URIs) para identificação dos
recursos.
Identificação dos recursos
Use URIs amigáveis e
padronizadas!
//use URIs amigáveis:
http://api.com/clientes
http://api.com/clientes/12
//padronize:
http://api.com/clientes
http://api.com/produto //singular
Identificação dos recursos
Evite adicionar na URI a
operação a ser realizada no
recurso
http://api.com/clientes/cadastrar
http://api.com/clientes/listar
Identificação dos recursos
Evite adicionar na URI o formato desejado, para isso utilize os atributos de
negociação de conteúdo das requisições.
http://api.com/clientes/json
//use:
http://api.com/clientes --header 'Accept: application/json'
http://api.com/clientes
Identificação dos recursos
Uma boa documentação dos recursos é
fundamental, existem várias ferramentas
que ajudam a criar como a Swagger . Sendo
necessário uma alteração de URI, notifique
os clientes desse serviço previamente e
verifique a possibilidade de manter a URI
antiga, redirecionando para a nova.
Identificação dos recursos
Classificamos as requisições
http por métodos/verbos ,
sendo que cada um possui um
significado, utilizamos essa
classificação para determinar
o tipo de operação a ser
realizado sobre o recurso.
GET
obter dados
POST
criar dados.
PUT
atualizar dados.
PATCH
atualizar parcialmente dados.
DELETE
apagar dados.
cliente
API/REST
Interface Uniforme: 2° Princípio
Representações dos recursos
A comunicação é feita por
representações, indicando o
estado atual dos recursos,
permitindo um desacoplamento
entre o cliente e o servidor. XML,
JSON, HTML, CSV e outros
formatos são utilizados. Sendo
considerado uma boa prática
fornecer suporte múltiplo
cliente
API/REST
<user>
<name>ana</name>
<role>manager</role>
<active>true</active>
</user>
{
name:”ana”,
role:”manager”,
active:true
}
request url: api.com
method: GET
accept:
application/json
request url: api.com
method: GET
accept: application/xml
Interface Uniforme: 3°
Princípio
Mensagens auto-descritivas
Cada requisição deve conter
informações suficientes para o
servidor processar a
informação.
cliente
API/REST
{
name:”ana”,
role:”manager”,
active:true
}
request url:
api.com/user/1
method: GET
accept: application/json
o servidor deve
retornar os dados do
usuário de id=1
formatados em json
{ name:”ana”,
role:”manager”,
active:true,
links: [{ "type": "GET",
"rel": "team",
"uri": “api.com/user/1/team"},
{"type": "GET",
"rel": "manager",
"uri":
“api.com/user/1/manager"}]
}
Interface Uniforme: 4°
Princípio
HATEOAS
“hipermídia como o
mecanismo do estado do
aplicativo”
Respostas devem conter links
de conteúdos relacionados aos
recursos solicitados,
orientando os clientes a
consumirem a api sem
conhecimento profundo dela.
cliente
API/REST
request url:
api.com/user/1
method: GET
accept: application/json
Modelo de maturidade
Richardson
Implementar HATEOAS é o que
caracteriza o último nível do
modelo de maturidade proposto
por Leonard Richardson para
classificar APIs do tipo Rest.
nível 0 - pox
nível 1 - recursos
nível 2 - métodos http
nível 3 - hateoas
REST
Nível 0
POX
Usar o protocolo http para
comunicação, mas sem nenhuma
padronização. POX é uma sigla
para Plain Old XML , se referindo
a representação básica do XML,
indicando a única preocupação
desse nível, o transporte de
dados nível 0 - pox
nível 1 - recursos
nível 2 - métodos http
nível 3 - hateoas
REST
Nível 1
Recursos
O conceito de recursos devem
ser considerados na
implementação da API,
lembrando de identificá-los via
endpoints(URIs)
nível 0 - pox
nível 1 - recursos
nível 2 - métodos http
nível 3 - hateoas
REST
Nível 2
Métodos http
Uso correto dos métodos
http( get, post, put, delete , …)
para associá-los às operações
sobre os recursos da API
nível 0 - pox
nível 1 - recursos
nível 2 - métodos http
nível 3 - hateoas
REST
Nível 3
HATEOAS
Adição de links nas respostas das
requisições, adicionando
informação sobre operações
alternativas sobre o recurso
acessado. Alguns consideram
desnecessário esse nível de
maturidade para considerar uma
API Restful nível 0 - pox
nível 1 - recursos
nível 2 - métodos http
nível 3 - hateoas
REST
5°critério
Arquitetura em Camadas
Requisições e respostas passam
por diversas camadas
gerenciadas de forma
independente com propósitos
diferentes. É recomendável que o
cliente nunca conecte-se
diretamente no servidor de
aplicação, passando por outras
camadas, tais como
balanceamento de carga,
segurança, etc.
cliente
API/REST
camada de segurança
balanceador de carga
resreq
6° critério
Código sobre demanda(opcional)
Na maioria das vezes, um servidor retorna
representação de recursos(XML, JSON). Porém,
quando necessário, os servidores podem
fornecer código executável(Javascript). Isso
diminui a visibilidade das respostas, mas estende
as funcionalidades do cliente.
Conceitos de API Restful apresentados!
Próxima etapa: Implementando uma
API Restful !
Referências para estudo
Rest - Construa APIs inteligentes de
maneira simples de Alexandre Saudate