SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Fernando Camargo
Apresentado por
Mestrando em Engenharia de Computação, UFG
Design de RESTful APIs
Tópicos
1. Introdução ao REST
a. Por quê?
b. Seis Regras
c. Métodos e Status HTTP
2. Boas Práticas
a. Versionamento
b. Formato de Representação
c. HATEOAS
d. Representação Parcial e Paginação
e. Respostas de Erro
f. Segurança
g. Cache
Introdução ao REST
Web Sites
Web Services (SOAP)
Web Services (REST)
Por que REST?
•Menor gasto de rede
•Menor complexidade
•SOAP pensado para servidores
•REST pensado para dispositivos leves
•Possibilita cache
Seis Regras
REST é um Padrão Arquitetural sobre o HTTP com
as regras:
•Interface Uniforme
•Stateless
•Cacheável
•Cliente-Servidor
•Sistema em Camadas (Possibilidade)
•Código sob Demanda (Possibilidade)
Interface Uniforme
•Baseado em Recursos, não Ações
•Recursos identificados por URL
•Ações vinculados aos Métodos HTTP
Interface Uniforme
•Baseado em Recursos, não Ações
•Recursos identificados por URL
•Ações vinculados aos Métodos HTTP
•URLs com substantivos no Plural
URLs Erradas
•/listarProdutos
•/obterProdutos/1
•/criarProdutos
•/deletarProduto/1
URLs Corretas
•/produtos
•/produtos/1
Interface Uniforme
•Representational State Transfer
•HATEOAS: Hypermedia as the Engine of
Application State
•Mensagens autodescritivas
Métodos HTTP
✔Idempotência: múltiplas requisições não
alteram o resultado
•GET: obtenção
•HEAD: obtenção de metadados
•DELETE: remoção
•POST (não idempotente): criação sem
ID/atualização parcial
•PUT: atualização completa/criação com ID
Status HTTP
• 200 OK
• 201 Created
• 304 Not Modified
• 400 Bad Request
• 401 Unauthorized
• 403 Forbidden
• 404 Not Found
Boas Práticas
Versionamento
✔Evitar quebra de contrato com clientes
Tipos de versionamento:
•Através de URL
•Através de Tipo de Media
Formato de Representação
✔Suportar mais de um formato (XML e JSON)
Especificação do formato desejado:
•Através de URL (pouco usado)
•Através de Tipo de Media (Accept/Content-
Type)
Exemplos de requisições
• GET api.devfest.com.br/v1/palestrantes
Accept: application/json
• GET api.devfest.com.br/v1/palestrantes/23
Accept: application/json
• POST api.devfest.com.br/v1/palestrantes
Content-Type: application/json
Exemplos de requisições
• GET api.devfest.com.br/palestrantes
Accept: application/vnd.palestrantes-v1+json
• GET api.devfest.com.br/palestrantes/23
Accept: application/vnd.palestrantes-v1+json
• POST api.devfest.com.br/palestrantes
Content-Type: application/vnd.palestrantes-
v1+json
Representação parcial
• Parâmetro “fields”
• GET api.devfest.com.br/palestrantes?
fields=nome,endereco
{
“href”: “https://api.devfest.com.br/palestrantes/23”,
“nome”: “Fernando Camargo”,
“endereco”: {
“href”: “https://api.devfest.com.br/enderecos/23”
}
}
Representação parcial
• Parâmetro “expand”
• GET api.devfest.com.br/palestrantes?
fields=nome,endereco&expand=endereco
{
“href”: “https://api.devfest.com.br/palestrantes/23”,
“nome”: “Fernando Camargo”,
“endereco”: {
“href”: “https://api.devfest.com.br/enderecos/23”,
“logradouro” : “Rua 31-A”, ...
}
}
HATEOAS
• Atributo “href”
{
“href”: “https://api.devfest.com.br/palestrantes/23”,
“nome”: “Fernando Camargo”, …,
“endereco”: {
“href”: “https://api.devfest.com.br/enderecos/23”,
“logradouro” : “Rua 31-A”, ...
}
}
HATEOAS
• Paginação
{
“href”: “https://api.devfest.com.br/palestrantes”, …
“next”: {“href”: “...”},
“previous”: {“href”: “...”},
“last”: {“href”: “...”},
“items”: [
{“href”: “...”, …},
{“href”: “...”, …}, ...
]
}
Respostas de Erro
•Utilizar Status HTTP
•Documentar e identificar erros
•Prover URL para documentação do erro
•Prover mensagem para usuário e
desenvolvedor
Respostas de Erro
409 Conflict
{
“code”: 145,
“message”: “Já existe um palestrante com esse CPF.”,
“devMessage”: “Já existe um palestrante com esse CPF.
Pode ser causado por repetição de requisições.”,
“moreInfo”:
“https://dev.devfest.com.br/docs/api/errors/145”
}
Segurança
• Oauth 1.0a ou 2.0
• Autenticação acontece em toda requisição
Cache
• Header “Etag” com hash do Recurso na
resposta
• Header “If-None-Match” com o hash anterior
do Recurso em nova requisição
• 304 Not Modified
Dúvidas?
fernando.camargo.ti@gmail.com
Contato:

Mais conteúdo relacionado

Destaque

JoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designJoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designFernando Camargo
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIFernando Camargo
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - ValidationDzmitry Naskou
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data AccessDzmitry Naskou
 
Spring Framework - Expression Language
Spring Framework - Expression LanguageSpring Framework - Expression Language
Spring Framework - Expression LanguageDzmitry Naskou
 
Spring Framework - Web Flow
Spring Framework - Web FlowSpring Framework - Web Flow
Spring Framework - Web FlowDzmitry Naskou
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVCDzmitry Naskou
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring SecurityDzmitry Naskou
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - CoreDzmitry Naskou
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOPDzmitry Naskou
 

Destaque (11)

JoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designJoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered design
 
Java annotation
Java annotationJava annotation
Java annotation
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - Validation
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data Access
 
Spring Framework - Expression Language
Spring Framework - Expression LanguageSpring Framework - Expression Language
Spring Framework - Expression Language
 
Spring Framework - Web Flow
Spring Framework - Web FlowSpring Framework - Web Flow
Spring Framework - Web Flow
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOP
 

Semelhante a Design de RESTful APIs

Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web APIVinicius Mussak
 
TDC2016SP - Construindo Web APIs em Java na era do Big Data
TDC2016SP - Construindo Web APIs em Java na era do Big DataTDC2016SP - Construindo Web APIs em Java na era do Big Data
TDC2016SP - Construindo Web APIs em Java na era do Big Datatdc-globalcode
 
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
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a InternetLeonardo Soares
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieArquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieVivaldo Jose Breternitz
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsAndre Baltieri
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDomingos Teruel
 
Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Renzo Nuccitelli
 
Google App Engine e Python
Google App Engine e PythonGoogle App Engine e Python
Google App Engine e PythonPeslPinguim
 
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoRenato Groff
 
Sistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebSistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebRafael Chagas
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperCesar Romero
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressRômulo Zoch
 
Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018
Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018
Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018Renato Groff
 
Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...
Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...
Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...Renato Groff
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 

Semelhante a Design de RESTful APIs (20)

Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web API
 
TDC2016SP - Construindo Web APIs em Java na era do Big Data
TDC2016SP - Construindo Web APIs em Java na era do Big DataTDC2016SP - Construindo Web APIs em Java na era do Big Data
TDC2016SP - Construindo Web APIs em Java na era do Big Data
 
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
 
A Web é uma API
A Web é uma APIA Web é uma API
A Web é uma API
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a Internet
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieArquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/Mackenzie
 
Web apis
Web apisWeb apis
Web apis
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
 
Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE
 
Google App Engine e Python
Google App Engine e PythonGoogle App Engine e Python
Google App Engine e Python
 
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
 
Sistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na WebSistemas Distribuídos baseados na Web
Sistemas Distribuídos baseados na Web
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPress
 
Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018
Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018
Microsoft Azure para Desenvolvedores Web - Azure para Devs e DBAs - Maio-2018
 
Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...
Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...
Dicas para uma maior performance em APIs REST - Tech Meetup - Itaú Unibanco -...
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Asa cpbr4
Asa cpbr4Asa cpbr4
Asa cpbr4
 

Design de RESTful APIs