SlideShare uma empresa Scribd logo
1 de 19
O que RESTa para sua
aplicação?
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
Quem sou?
danielsatiro
https://daniel.satiro.me
@dansatiro
danielsatiro
@danielsatirodarocha
https://github.com/danielsatiro
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)
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}
Recursos
Nunca nomeie recursos dessa forma:
− /obterClientes
− /clientes/atualizar
Mapa de relações utilizando sub-recursos
− /produtos/{id}/avaliacoes
− /produtos/{id}/avaliacoes/{id}
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.
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
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
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”}
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”}
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”}
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
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.
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.
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"}
}
}
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
Perguntas?
Obrigado!

Mais conteúdo relacionado

Semelhante a O que RESTa para sua aplicação? RESTful API fundamentos

Design e boas praticas de apis com CSharp
Design e boas praticas de apis com CSharpDesign e boas praticas de apis com CSharp
Design e boas praticas de apis com CSharpRodolfo Fadino Junior
 
Deck apix 2017 design & security - case cielo lio
Deck apix 2017   design & security - case cielo lioDeck apix 2017   design & security - case cielo lio
Deck apix 2017 design & security - case cielo lioLuis Moraes Junior
 
Backend para dispositivos moveis
Backend para dispositivos moveisBackend para dispositivos moveis
Backend para dispositivos moveisThales Lima
 
Design e boas práticas de api's com CSharp
Design e boas práticas de api's com CSharpDesign e boas práticas de api's com CSharp
Design e boas práticas de api's com CSharpRodolfo Fadino Junior
 
CIÊNCIAVITAE - Suporte ao Serviço de API
CIÊNCIAVITAE - Suporte ao Serviço de APICIÊNCIAVITAE - Suporte ao Serviço de API
CIÊNCIAVITAE - Suporte ao Serviço de APIPTCRIS FCT
 
Jornadas FCCN 2019 - Workshop "Repositórios Integrados"
Jornadas FCCN 2019 - Workshop "Repositórios Integrados"Jornadas FCCN 2019 - Workshop "Repositórios Integrados"
Jornadas FCCN 2019 - Workshop "Repositórios Integrados"FCCN - RCAAP
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebMatheus Fidelis
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadoEduardo Bohrer
 
Api first desenhando e testando sua api like a boss
Api first   desenhando e testando sua api like a bossApi first   desenhando e testando sua api like a boss
Api first desenhando e testando sua api like a bossRenan Petronilho Sant Anna
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1alinebiath
 
HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12Alexandre Gaigalas
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo httpCarlos Veiga
 
Sala 2 03 o auth e cadastro de produtos - danilo santos
Sala 2 03   o auth e cadastro de produtos - danilo santosSala 2 03   o auth e cadastro de produtos - danilo santos
Sala 2 03 o auth e cadastro de produtos - danilo santosfsolari
 
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Alcyon Ferreira de Souza Junior, MSc
 

Semelhante a O que RESTa para sua aplicação? RESTful API fundamentos (20)

Design e boas praticas de apis com CSharp
Design e boas praticas de apis com CSharpDesign e boas praticas de apis com CSharp
Design e boas praticas de apis com CSharp
 
Deck apix 2017 design & security - case cielo lio
Deck apix 2017   design & security - case cielo lioDeck apix 2017   design & security - case cielo lio
Deck apix 2017 design & security - case cielo lio
 
Backend para dispositivos moveis
Backend para dispositivos moveisBackend para dispositivos moveis
Backend para dispositivos moveis
 
Design e boas práticas de api's com CSharp
Design e boas práticas de api's com CSharpDesign e boas práticas de api's com CSharp
Design e boas práticas de api's com CSharp
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
CIÊNCIAVITAE - Suporte ao Serviço de API
CIÊNCIAVITAE - Suporte ao Serviço de APICIÊNCIAVITAE - Suporte ao Serviço de API
CIÊNCIAVITAE - Suporte ao Serviço de API
 
Jornadas FCCN 2019 - Workshop "Repositórios Integrados"
Jornadas FCCN 2019 - Workshop "Repositórios Integrados"Jornadas FCCN 2019 - Workshop "Repositórios Integrados"
Jornadas FCCN 2019 - Workshop "Repositórios Integrados"
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação Web
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançado
 
Api first desenhando e testando sua api like a boss
Api first   desenhando e testando sua api like a bossApi first   desenhando e testando sua api like a boss
Api first desenhando e testando sua api like a boss
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
 
Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019
 
HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12
 
HTTP - Visão geral
HTTP - Visão geralHTTP - Visão geral
HTTP - Visão geral
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo http
 
Web service
Web serviceWeb service
Web service
 
Sala 2 03 o auth e cadastro de produtos - danilo santos
Sala 2 03   o auth e cadastro de produtos - danilo santosSala 2 03   o auth e cadastro de produtos - danilo santos
Sala 2 03 o auth e cadastro de produtos - danilo santos
 
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Automidia Service Management
Automidia Service ManagementAutomidia Service Management
Automidia Service Management
 

O que RESTa para sua aplicação? RESTful API fundamentos

  • 1. O que RESTa para sua aplicação?
  • 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