SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
O que é esse tal de REST?
Filipe Ximenes (@xima)
Sobre
● Filipe Ximenes (Xima)
○ Recife
○ Vinta
○ 4 anos na comunidade Python
○ Django
○ Javascript
○ APIs
https://www.getcinnamon.io/
Open source
Tapioca
https://github.com/vintasoftware/tapioca-wrapper
Open source
Django boilerplate
https://github.com/vintasoftware/boilerplate
Segunda às 14:05
Fishbowl
Amanhã às 14:05
O que não é REST
Alguns mitos
● REST é um protocolo
● Se é API então é REST
● Se é JSON então é REST
● Se é CRUD então é REST
● Se usa os métodos HTTP
(GET/POST/PUT/DELETE) então é REST
REST
não é sobre
APIs
O melhor exemplo de sistema RESTfull
A World Wide Web
(ou Internet para os mais intimos)
História
● 1945 - Memex, "As We May Think", Vannevar
Bush
História
● 1989 - Primeira
conexão HTTP
○ Tim Berners-Lee
○ CERN
(Organisation
européenne pour la
recherche
nucléaire) "PROPERTY OF CERN"
História
● 1990 - Formalização do HTTP
○ Internet Engineering Task Force (IETF)
○ World Wide Web Consortium (W3C)
● 1997 - HTTP/1.1
○ Participação de Roy Fielding
● 2000 - "Architectural Styles and the Design of
Network-based Software Architectures"
○ Dissertação de doutorado de Roy Fielding
○ REST
REST & RESTfullness
O que é REST
● Acrônimo para:
REpresentational State Transfer
● pt-br:
Transferência de Estado Representacional
● Estilo Arquitetural
○ Não é um protocolo
Alguns conceitos
● Tangíves ou intangíveis
● Recurso != Tabela do banco de dados
○ 1 ou + tabelas
○ Processamento
● Substantivos
Recursos (resources)
Recursos (resources)
● Peças de uma bicicleta
● Bicicleta montada
● Trajeto percorrido
● Registro da manutenção da bicicleta
● Acessórios
● Completa ou parcial
● Quantidade por recurso: [0, +infinito)
Representações
Representações
● Rodas
● Quadro
● Pedal
● Guidão
● Freios
● Tamanho
● Marca
● Ano
● Modelo
Representações
<bicicleta>
<quadro>
<tamanho>52</tamanho>
<cor>preto</cor>
</quadro>
<guidao>
<tamanho>60</tamanho>
</guidao>
</bicicleta>
{
"quadro": {
"tamanho": 52,
"cor": "preto"
}
"guidao": {
"tamanho": 60
}
}
HATEOAS
● Hypermedia As The Engine Of Application
State
● Hipermídia Como Motor do Estado da
Aplicação
○ Hipermídia (Links)
○ Transição de estado
Transferência de Estado
Representacional (REST)
(ou: como funciona o seu navegador web)
Transferência de Estado Representacional
● Queremos acessar o meu perfil no Twitter
[RECURSO]
● Estado inicial: www.twitter.com/
● Clicamos em "ver perfil" [LINK]
● Um servidor web retorna uma página HTML
[REPRESENTAÇÃO]
● Estado final: https://twitter.com/xima
Preceitos [constraints] de uma
arquitetura REST
(ou: o que caracteriza um sistema RESTfull)
1. Cliente - Servidor
2. Stateless
● Ausência de estado: o servidor não deve
guardar o estado do cliente.
● A requisição deve conter tudo que é
necessário para o servidor processar a
resposta.
3. Cache
● O cliente deve ser informado sobre as
propriedades de cache de um recurso para
que possa decidir quando deve ou não utilizar
cache.
4. Interface Uniforme
● 4 sub-preceitos
○ Identificação de recursos (URI).
○ Manipulação de recursos a partir de suas
representações.
○ Mensagens auto descritivas.
○ HATEOAS
5. Sistema em camadas
● O cliente não precisa saber sobre as camadas
entre ele o servidor.
● Camadas da internet (HTTP/TCP/IP)
● Caching
○ Browser
○ Servidor
○ Banco de dados
6. Código sob demanda
● O cliente deve ser capaz de atualizar partes
de seu código dinamicamente.
● Não é obrigatório.
REST e APIs
APIs HTTP e os preceitos do REST
● Cliente - Servidor
● Stateless
● Cache
● Interface Uniforme
○ Identificação de recursos, manipulação de
recursos a partir de suas representações,
mensagens auto descritivas, HATEOAS.
● Sistema em camadas
● Código sob demanda
APIs e HATEOAS
"REST APIs must be hypertext-driven"
Roy T. Fielding
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
APIs e HATEOAS
http://www.test.com/api
{
"users": "http://www.test.com/api/users",
"companies": "http://www.test.com/api/companies"
}
http://www.test.com/api/users
[
{"name": "Filipe",
"profile": "http://www.test.com/api/users/1"},
{"name": "Flávio",
"profile": "http://www.test.com/api/users/2"}
]
http://www.test.com/api/users/1
{
"name": "Filipe",
"twitter": "@xima",
"company": "Vinta"
}
Evolutibilidade
https://twitter.com/fielding/status/376835835670167552
Evolutibilidade é a capacidade de
adicionar, remover ou modificar
funcionalidades sem modificar interfaces
https://twitter.com/fielding/status/684109534659411968
Não temos controle sobre o mundo!
As regras de negócio mudam o tempo
todo e o sistema evolui
https://twitter.com/fielding/status/647491186937036800
REST foi pensado para que os
desenvolvedores estejam preparados
para mudanças.
https://twitter.com/fielding/status/684110775313551360
Como aplicar?
Precisamos de protocolos!
(mas não precisamos
reescrever os já existentes)
https://twitter.com/fielding/status/684111566304743424
Os outros dois preceitos
● Manipulação de recursos
○ As representações entregues ao cliente devem
ser suficientes para que ele seja capaz de realizar
modificações nos recursos.
● Mensagens auto descritivas
○ Respostas devem conter todo o conteúdo
necessário para o cliente tomar decisões de como
proceder.
Como aplicar
● Pense bem nas representações dos
recursos do sistema.
○ Desenvolva seus Media-Types
● Documente TUDO
○ O que o cliente deve esperar da requisição?
○ Como deve lidar com erros?
○ Como deve lidar com mudanças?
■ Como lidar com um dado não esperado?
Como aplicar
● Utilize os padrões já existentes
○ Métodos do HTTP
■ GET/POST/PUT/PATCH/DELETE
○ Status de resposta do HTTP:
■ 200 OK
■ 201 CREATED
■ 404 NOT FOUND
● Defina mensagens de erro claras
REST na vida real
Ninguém vai ler a sua documentação
Clientes não vão estar preparados para
mudanças na API
Você será xingado e odiado por todos os
desenvolvedores
Desenvolver um cliente HATEOAS é bem mais
complicado do que parece
Sua API não precisa ser
100% RESTfull
Twitter: @xima
Github: filipeximenes
Email: ximenes@vinta.com.br
Perguntas?

Contenu connexe

Tendances

WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Javaalexmacedo
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017Vitor Mattos
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPCarlos Santos
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]Igor Santos
 
Introdução ao Python & Web Services
Introdução ao Python & Web ServicesIntrodução ao Python & Web Services
Introdução ao Python & Web ServicesDorneles Treméa
 
Segurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPSegurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPGedvan Dias
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 
PHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesPHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesrjsmelo
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!magnunleno
 

Tendances (20)

MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Java
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Vim Rocks!
Vim Rocks!Vim Rocks!
Vim Rocks!
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 
Introdução ao Python & Web Services
Introdução ao Python & Web ServicesIntrodução ao Python & Web Services
Introdução ao Python & Web Services
 
Segurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPSegurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHP
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
PHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesPHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicações
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
Python na Web
Python na WebPython na Web
Python na Web
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!
 

En vedette

Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E PraticaLuiz Costa
 
Arquitetura SOAP e REST
Arquitetura SOAP e RESTArquitetura SOAP e REST
Arquitetura SOAP e RESTRhaniel
 
DJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APIS
DJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APISDJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APIS
DJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APISFernando Rocha
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de djangoFilipe Ximenes
 
Junho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonJunho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonGrupo de Testes Carioca
 
Integração utilizando REST API e Microservices
Integração utilizando REST API e MicroservicesIntegração utilizando REST API e Microservices
Integração utilizando REST API e MicroservicesDenis Santos
 
Learning python with flask (PyLadies Malaysia 2017 Workshop #1)
Learning python with flask (PyLadies Malaysia 2017 Workshop #1)Learning python with flask (PyLadies Malaysia 2017 Workshop #1)
Learning python with flask (PyLadies Malaysia 2017 Workshop #1)Sian Lerk Lau
 

En vedette (8)

Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Arquitetura SOAP e REST
Arquitetura SOAP e RESTArquitetura SOAP e REST
Arquitetura SOAP e REST
 
DJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APIS
DJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APISDJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APIS
DJANGO-REST-FRAMEWORK: AWESOME WEB-BROWSABLE WEB APIS
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Junho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonJunho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em python
 
Integração utilizando REST API e Microservices
Integração utilizando REST API e MicroservicesIntegração utilizando REST API e Microservices
Integração utilizando REST API e Microservices
 
Learning python with flask (PyLadies Malaysia 2017 Workshop #1)
Learning python with flask (PyLadies Malaysia 2017 Workshop #1)Learning python with flask (PyLadies Malaysia 2017 Workshop #1)
Learning python with flask (PyLadies Malaysia 2017 Workshop #1)
 

Similaire à O que é esse tal de rest? [PyBR2016]

Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
NOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonNOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonfelipe bastosweb
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09Felipe Ribeiro
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Rest Java One
Rest Java OneRest Java One
Rest Java OneDextra
 
OpenAM - Fast SSO
OpenAM - Fast SSOOpenAM - Fast SSO
OpenAM - Fast SSOYros
 
Django: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazoDjango: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazoBernardo Fontes
 
No mundo das ap is com Restful webservices
No mundo das ap is com Restful webservicesNo mundo das ap is com Restful webservices
No mundo das ap is com Restful webservicesWaldemar Neto
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Php Visao Geral Svs
Php Visao Geral SvsPhp Visao Geral Svs
Php Visao Geral Svscristhianobv
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 

Similaire à O que é esse tal de rest? [PyBR2016] (20)

Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
NOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonNOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com python
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Rest Java One
Rest Java OneRest Java One
Rest Java One
 
OpenAM - Fast SSO
OpenAM - Fast SSOOpenAM - Fast SSO
OpenAM - Fast SSO
 
Django: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazoDjango: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazo
 
No mundo das ap is com Restful webservices
No mundo das ap is com Restful webservicesNo mundo das ap is com Restful webservices
No mundo das ap is com Restful webservices
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Php Visao Geral Svs
Php Visao Geral SvsPhp Visao Geral Svs
Php Visao Geral Svs
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 

O que é esse tal de rest? [PyBR2016]