SlideShare uma empresa Scribd logo
Boas práticas no desenvolvimento
de uma RESTful API
Fernando Camargo
● Graduando em Engenharia de Computação -
UFG
● Fibonacci Soluções Ágeis
● Java EE, Android, Grails, Node.JS e front-end
web
● Artigos: Construindo uma RESTful API Parte 1
e 2 – Java Magazine
Boas práticas no desenvolvimento
de uma RESTful API
Agenda:
● Introdução ao REST
● Boas práticas:
➔ Versionamento
➔ Representação
➔ HATEOAS
➔ Representação parcial e paginação
➔ Erros
➔ Segurança
➔ Cache
Introdução ao REST
Websites vs Webservices
SOAP
● Especificação
● XML → maior gasto de rede
● Complexidade → dificuldade para HTML5 e
mobile
● Comunicação entre servidores → segurança
assumida
● Sem cache
REST
● Estilo arquitetural
● Diversos formatos → JSON ocupa menos
rede
● Simplicidade → clientes magros
● Comunicação entre cliente e servidor
● Alto poder de cache
HTML5 + mobile ready!
Seis regras do REST
● Interface uniforme
● Stateless
● Cacheável
● Cliente-Servidor
● Sistema em camadas
● Código sob demanda (opcional)
Interface uniforme
● Contrato entre cliente e servidor
● Recursos no lugar de ações
● URLs identificam recursos
● Operações identificadas por HTTP Methods
GET /produtos
GET /produtos/1
Interface uniforme
● Representações no lugar de recursos
(REpresentational State Transfer – REST)
● Hypermedia
● Mensagens auto-descritivas
Stateless
● Requisições auto-contidas
● Sem manutenção de estado do lado do
servidor
Cacheável
● Possibilidade de fazer cache dos resultados
● Melhora na performance
Cliente-Servidor
● Separação de responsabilidades
● Desenvolvimento independente, respeitando o
contrato
Sistema em camadas
● Camadas do servidor invisíveis ao cliente
● Aumento de escalabilidade
Código sob demanda (Opcional)
● Possibilidade de resposta com código
executável
HTTP Methods
● Ações sobre os recursos
● Podem ser ou não idempotentes
HTTP GET
● Usado para se obter determinado(s) recurso(s)
● Resposta: representação em formato desejado
● Idempotente
GET /recursos
GET /recursos/1
HTTP DELETE
● Usado para deletar recurso(s)
● OK ou Not Found
● Idempotente
DELETE /recursos/1
HTTP HEAD
● Usado para obter metadados do(s) recurso(s)
● Resposta: representação com metadados
relevantes
● Idempotente
HEAD /recursos
HEAD /recursos/1
HTTP POST
● Usado para se criar um recurso (sem
especificar ID) ou fazer uma atualização parcial
de um existente
● Resposta: Created + Location ou OK
● Não idempotente
HTTP PUT
● Usado para se fazer uma atualização
completa (ID na URL) ou criar um recurso
(especificando ID)
● Resposta: OK
● Idempotente
Boas práticas
Versionamento
● Quebra de contrato → nova versão
● Cliente especifica versão invocada
● Prazos de migração para versões novas
● Número de versão → baixa granularidade (v1,
v2, v3, etc)
● URL vs Content-Type/Accept
Versionamento - URL
Versão especificada na URL
● GET api.joincommunity.com.br/v1/palestrantes
Accept: application/json
● POST
api.joincommunity.com.br/v1/palestrantes
Content-Type: application/json
✔ Versionamento da API como um todo
Versionamento – Content-
Type/Accept
Versão especificada nos headers.
● GET api.joincommunity.com.br/palestrantes
Accept: application/vnd.palestrante-v1+json
● POST api.joincommunity.com.br/palestrantes
Content-Type: application/vnd.palestrante-
v1+json
✔ Versionamento de representações dos
recursos
Representação
● Diferentes representações disponíveis: XML vs
JSON
● camelCase em nome dos campos
● Datas em ISO 8601: yyyy-MM-
dd'T'HH:mm:ss.SSS'Z'
HATEOAS
Hypermedia as the Engine of Application State
● Recursos identificados por URLs
● Hypermedia → hyperlinks para recursos
relacionados
{
“href”:
“api.joincommunity.com.br/palestrantes/1”
}
Representação parcial
● Apenas campos necessários como resposta
ao GET
● Parâmetro fields
GET api.joincommunity.com.br/palestrantes?
fields=nome,email
{“href”:”[...]”, “nome”:”[...]”, “email”:“[...]”}
Representação parcial
● Recursos relacionados representados de
forma incompleta por padrão
● Parâmetro expand
GET
api.joincommunity.com.br/palestrantes/1?
expand=endereco
{
“href”: “[...]”,
“endereco”: {“href”: “[...]”}
}
Paginação
● Parâmetros offset e limit
● Links para next, first, previous, last, etc.
● Campo items
Paginação
{
“href”: “[...]/palestrantes”,
“next”: {“href”: “[...]/palestrantes?offset=10”},
[…],
“items”: [
{[…]}, {[…]}, {[…]}, {[…]}, {[…]}, {[…]},
{[…]},
{[…]}, {[…]}
]
Erros
● Status HTTP
● Código que identifica o erro
● Mensagem destinada ao usuário final
● Mensagem destinada ao desenvolvedor
● URL para documentação
Erros
409 Conflict
{
“status”: 409,
“code”: 145,
“message”: […],
“developerMessage”: […],
“moreInfo”: “[...]/docs/api/errors/145”
}
Segurança
● Stateless → autenticação por requisição
● Identificação do usuário atrás de um token
● Autorização baseada em recursos e não em
URLs
● OAuth 1.0a e OAuth 2.0
Cache
● Performance e escalabilidade
● ETag
● 304 Not Modified
GET /palestrantes/1
ETag: “62wsc482nsadf742f7831”
Body:
{[...]}
Cache
GET /palestrantes/1
If-None-Match: “62wsc482nsadf742f7831”
● 304 Not Modified
● ETag: “2tfh892fds982nksaf8932”
Body:
{[...]}
Obrigado!
● E-mail: fernando.camargo.ti@gmail.com

Mais conteúdo relacionado

PDF
APIs Rest(Ful): como fazer, por Alex Piaz
PPTX
REST: Padrões e Melhores Práticas
PDF
Como um grande sistema REST funciona - arquitetura e desempenho
PDF
Boas práticas de API Design
PDF
Web 2.0 e RIA com PHP
PDF
Webservices
PDF
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
PDF
Panorama atual do PHP
APIs Rest(Ful): como fazer, por Alex Piaz
REST: Padrões e Melhores Práticas
Como um grande sistema REST funciona - arquitetura e desempenho
Boas práticas de API Design
Web 2.0 e RIA com PHP
Webservices
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Panorama atual do PHP

Mais procurados (20)

PDF
Ferramentas Livres Para Desenvolvimento com PHP
PDF
Aula Introdução a VRaptor 4 - Pós Java UTFPR
PDF
Introdução APIs RESTful
ODP
Zend Framework
ODP
Phpreact flisol-fb-2014
PDF
Zend Framework
PDF
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
PPT
PDF
Framework web 01 - Aula UTFPR 2018
PDF
Mini Curso Zend Framework
PDF
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
ODP
Javascript para adultos
PDF
PPTX
Unit Test JavaScript
PDF
Aula parte 1 de JSF 2.2
PDF
Introdução à Servlets e JSP
PDF
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
PDF
Introdução aos aplicativos tipo canvas
PDF
.NET 6: O que há de novo e o que está por vir?
PPTX
Uaijug ADF - spring boot - microservice - Introdução
Ferramentas Livres Para Desenvolvimento com PHP
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Introdução APIs RESTful
Zend Framework
Phpreact flisol-fb-2014
Zend Framework
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Framework web 01 - Aula UTFPR 2018
Mini Curso Zend Framework
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Javascript para adultos
Unit Test JavaScript
Aula parte 1 de JSF 2.2
Introdução à Servlets e JSP
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Introdução aos aplicativos tipo canvas
.NET 6: O que há de novo e o que está por vir?
Uaijug ADF - spring boot - microservice - Introdução
Anúncio

Destaque (20)

PDF
API - Como fazer?
PDF
Criando e consumindo webservice REST com PHP e JSON
PPTX
Rest API's
PDF
APIs REST - Introdução e alguns conceitos
PDF
Descobrindo APIs REST
PDF
Jquery fundamentals-book-pt-br
PDF
RESTful API - GDG Tech Talk - Novembro de 2014
PDF
Projeto de API, por Gilmar P.S
PPTX
Java API for Social Media
PDF
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
PPTX
Testando aplicações DataSnap
ODP
Boas práticas no desenvolvimento de uma RESTful API
ODP
Construção de Frameworks com Annotation e Reflection API em Java
ODP
Banco de dados no Android com Couchbase Lite
PDF
Design de RESTful APIs
PDF
JoinCommunity 2 - Projetando um novo app usando user centered design
PPTX
OAuth2: Uma abordagem para segurança de aplicações e APIs REST - Devcamp 2014
PDF
Spring Framework - Validation
PDF
Spring Framework - Data Access
PDF
TDC 2015 - Segurança em Recursos RESTful com OAuth2
API - Como fazer?
Criando e consumindo webservice REST com PHP e JSON
Rest API's
APIs REST - Introdução e alguns conceitos
Descobrindo APIs REST
Jquery fundamentals-book-pt-br
RESTful API - GDG Tech Talk - Novembro de 2014
Projeto de API, por Gilmar P.S
Java API for Social Media
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Testando aplicações DataSnap
Boas práticas no desenvolvimento de uma RESTful API
Construção de Frameworks com Annotation e Reflection API em Java
Banco de dados no Android com Couchbase Lite
Design de RESTful APIs
JoinCommunity 2 - Projetando um novo app usando user centered design
OAuth2: Uma abordagem para segurança de aplicações e APIs REST - Devcamp 2014
Spring Framework - Validation
Spring Framework - Data Access
TDC 2015 - Segurança em Recursos RESTful com OAuth2
Anúncio

Semelhante a Boas práticas no desenvolvimento de uma RESTful API (20)

PDF
Front end architecture
PDF
Restful APIs com Spring 3
PDF
Novidades do JAX-RS 2.0
PDF
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
PPTX
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
PDF
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
PDF
Arquitetura Web Desacoplada - FCI/Mackenzie
PDF
REST vs GraphQL - A batalha das APIs.pdf
PPTX
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
PPTX
Integrando sua App ao Mundo via REST/JSON
PPTX
gRPC: Por que você ainda usa REST?
PDF
Django Channels - Aplicações real time com Django
PDF
REST Web Services com Java
PDF
Apresentação tdc como aproveitar os novos recursos do java ee 7
PDF
PDF
NGiNX, o motor da sua aplicação web
PDF
Consumindo dados via web service no android
PPS
Web Tools Pt B R
PDF
RubyConf 17 - Colocando sua aplicação vue nos trilhos
PDF
Workshop Hands-On APIX 2018 - Trilha Básica
Front end architecture
Restful APIs com Spring 3
Novidades do JAX-RS 2.0
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
Arquitetura Web Desacoplada - FCI/Mackenzie
REST vs GraphQL - A batalha das APIs.pdf
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
Integrando sua App ao Mundo via REST/JSON
gRPC: Por que você ainda usa REST?
Django Channels - Aplicações real time com Django
REST Web Services com Java
Apresentação tdc como aproveitar os novos recursos do java ee 7
NGiNX, o motor da sua aplicação web
Consumindo dados via web service no android
Web Tools Pt B R
RubyConf 17 - Colocando sua aplicação vue nos trilhos
Workshop Hands-On APIX 2018 - Trilha Básica

Último (6)

PPTX
Apresentação Evangelismo .pptx para inicio
PDF
Apresentação Como ser Criativo Colorido Azul Rosa Amarelo.pdf
PPTX
Avaliação das condições de conservação e comercialização do peixe tilápia pptx
PPTX
TEMPLATE SLIDES PARA EDIÇÃO_APRESENTAÇÃO
PDF
Mitologia Grega_20240223_215957_0000.pdf
PPTX
Conferência - A Coopetição como fator chave para a coesão territorial na atra...
Apresentação Evangelismo .pptx para inicio
Apresentação Como ser Criativo Colorido Azul Rosa Amarelo.pdf
Avaliação das condições de conservação e comercialização do peixe tilápia pptx
TEMPLATE SLIDES PARA EDIÇÃO_APRESENTAÇÃO
Mitologia Grega_20240223_215957_0000.pdf
Conferência - A Coopetição como fator chave para a coesão territorial na atra...

Boas práticas no desenvolvimento de uma RESTful API