SlideShare uma empresa Scribd logo
REST 101
REST Work Shop – 8 Março 2017
http://tutorials.jenkov.com/web-services/message-formats.h
Protocolo HTTP
 Protocolo Cliente-
Servidor
 Suportado em TCP
 Popularizado em 1990
por Tim Berners-Lee
 Criação da World Wide
Web
 Protocolo baseado em
Texto
HTTP Request
GET /
HTTP/1.1
Accept:*/*
Accept-Language: en-gb
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSI
6.0)
Host: www.ua.pt
Connection: Keep-Alive
HTTP Method
URL relativo ou URL
absoluto
HTTP
Version
Cabeçalho
HTTP Response
HTTP/1.1 200 OK
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=5xf5yjpvgjhxdkzghywlabmu; path=/; HttpOnly
Content-Type: text/html; charset=utf-8
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Connection: close
Date: Sat, 22 Mar 2014 22:10:03 GMT
Content-Length: 29298
Cache-Control: private
X-WUA-SERVER: WUA-I2
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta http-
equiv="Content-Type" content="text/html; charset=UTF-8" /><title>
Universidade de Aveiro › Página inicial
</title><script type="text/javascript" src="http://static.web.ua.pt/js/jquery/jquery-
1.10.2.min.js"></script><script type="text/javascript"
src="http://static.web.ua.pt/js/uacookies/1/cookies.pt.min.js"></script><link href="images/ua.ico"
rel="shortcut icon" /><link href="/css/menus.min.css" type="text/css" rel="Stylesheet" /><link
href="/css/stylesheet.min.css" type="text/css" rel="Stylesheet" /><link id="ctl00_dinstyle"
href="/css/dinStyle.aspx?css=dinStyle.css%26svr=uasite" type="text/css" rel="Stylesheet" />
Status
line
Cabeçalho
Duplo CRLF
(carriage return, line feed)
Conteúdos
pedidos
Principais métodos HTTP
 GET permite aceder a qualquer
informação identificada pelo Request-
URI
 POST utilizado para enviar
informação para o servidor
Códigos de Status e Erro
 1xx – Informacional – resposta intermédia que indica que o servidor
ainda não acabou de processar o pedido
 2xx – Bem sucedido
 200 OK
 3xx – Redireccionamento do cliente para outra localização
 301-permanent, 302-temporary
 4xx – Erro provocado pelo Cliente
 400-bad request, 403-forbidden, 404-not found
 5xx – Erro do Servidor
 500 Internal Server Error, 503-Service Unavailable,504-Gateway
Timeout
Resumindo…
Web App/Service
 A criação de sites dinâmicos que se
adaptam ao cliente podem ser
alcançados:
Manipulação local usando JS do DOM
Frameworks populares: Angular, React
Servidor serve conteúdos criados em
função dos pedidos do cliente
Frameworks populares: Django, ASP, Play
(Java)
Aplicação Web
 O servidor recebe os dados vindos do
cliente e processa os mesmos.
 Pode gerar:
Página Web com conteúdos
personalizados
Documento JSON
Que pode ser processado no Web Browser
Documento XML
Que pode ser processado por outra aplicação
(caso normal de um Web Service)
O QUE É ISSO DE REST ?
 Representational state transfer (REST) ou RESTful Web services
 Alternativa a WSDL ou SOAP
 Tem por base o protocolo HTTP e a sua semantica (GET, POST, DELETE, PUT)
 Propriedades Arquitecturais:
 Interface Uniforme
 através de URI que identifica univocamente o recurso
 Stateless
 servidor não guarda informação de estado, todas informação necessária à operação é enviada ao cliente
 Cacheable
 Uma que vez que é stateless, a informação pode facilmente ser cached
 Layered System
 Como é stateless e cacheable é possivel escalar a solução através de camadas que incluem proxys e load-
balancers
 REST não é um standard, mas faz uso de standards (HTTP, JSON, XML)
 Daí muitas coisas poderem ser chamadas de REST e não haver uma definição inequivoca.
Exemplos:
URL GET PUT POST DELETE
http://api.deti.
ua.pt/cursos
LISTAR
recursos
SUBSTITUIR
toda a
colecção
CRIAR uma
nova entrada
APAGAR a
colecção
http://api.deti.
ua.pt/cursos/
miect
CONSULTAR
recurso
SUBSTITUIR/
CRIAR o
recurso
SUBSTITUIR/
CRIAR o
recurso
APAGAR o
recurso
CherryPy
 Framework Web Minimalista (Python)
 Permite um desenvolvimento isolado
 Sem recorrer a um servidor Web comum (Apache,
NGINX)
 “Tão simples como:”import cherrypy
class HelloWorld(object):
@cherrypy.expose
def index(self):
return "Hello World!"
cherrypy.quickstart(HelloWorld())
Not so simple… 
 Criar um VirtualEnv e instalar o cherrypy:
$ virtualenv venv
$ source venv/bin/activate
$ pip install cherrypy
 Executar e testar:
$ python test.py
Abrir o browser/ARC
e colocar endereço:
http://localhost:8080
Mais do que uma função…
 Acrescente ao index(self):
print(cherrypy.request.headers)
print(cherrypy.request.method)
 E argumentos ?
@cherrypy.expose
def receptor(self, numero):
return str(int(numero)*2)
http://localhost:8080/miect/disciplinas
/labi/
import cherrypy
@cherrypy.popargs(‘curso’)
class Curso(object):
def __init__(self):
self.disciplinas = Disciplina()
@cherrypy.expose
def index(self, curso):
return “Sobre o curso de {}”.format(curso)
@cherrypy.popargs(‘disciplina’)
class Disciplina(object):
@cherrypy.expose
def index(self, curso, disciplina):
return “{} do curso de {}”.format(disciplina,
curso)
cherrypy.quickstart(Curso())
Então e os verbos HTTP ?
import json
import cherrypy
@cherrypy.expose
class StringGeneratorWebService(object):
def __init__(self):
self.curso = []
@cherrypy.tools.accept(media='text/json')
def GET(self):
return json.dumps(self.curso)
def POST(self, cursos):
self.curso = json.loads(cursos)
def PUT(self, curso):
self.curso.append(curso)
def DELETE(self):
self.curso = []
if __name__ == '__main__':
conf = {
'/': {
'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
'tools.response_headers.on': True,
'tools.response_headers.headers': [('Content-Type', 'text/plain')],
}
}
cherrypy.quickstart(StringGeneratorWebService(), '/', conf)
E como envio coisas ”a sério” ?
 Codificar em JSON/XML
class Root(object):
@cherrypy.expose
@cherrypy.tools.json_in()
def index(self):
data = cherrypy.request.json
class Root(object):
@cherrypy.expose
@cherrypy.tools.json_out()
def index(self):
return {'key': 'value'}
Então e como é que o meu
programa faz pedidos ?
 Requests: HTTP for Humans¶
Import requests
r = requests.put('http://localhost:8080/', data = {'key':'value'})
r = requests.delete('http://localhost:8080/')
r = requests.head('http://localhost:8080/')
r = requests.options('http://localhost:8080/')
r = requests.post('http://localhost:8080/', data=json.dumps(payload))
print(r.text)
Referências
 https://www.ietf.org/rfc/rfc2616.txt
 http://docs.cherrypy.org/en/latest/
 http://docs.python-
requests.org/en/master/

Mais conteúdo relacionado

Mais procurados

Descobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceDescobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performance
Gustavo Ciello
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
Daniel Brandão
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)
kidh0
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Java
alexmacedo
 
Ao infinito e além com PHP memcached e Gearman
Ao infinito e além com PHP memcached e GearmanAo infinito e além com PHP memcached e Gearman
Ao infinito e além com PHP memcached e Gearman
Elton Minetto
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEB
elliando dias
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Tchelinux
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
Adriano Schmidt
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - Nginx
Thiago Paes
 
JavaScript Applications
JavaScript ApplicationsJavaScript Applications
JavaScript Applications
Luciano Costa
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
Nuno Paz
 
Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]
João Augusto
 
NGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webNGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação web
ernaniaz
 
Redes servidor web
Redes servidor webRedes servidor web
Redes servidor web
Mauro Duarte
 
Slides nginx
Slides nginxSlides nginx
Slides nginx
Rafael Capucho
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
Artur Felipe Sousa
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015
Adriano Schmidt
 
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDBFlask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Bruno Rocha
 
Php Visao Geral Svs
Php Visao Geral SvsPhp Visao Geral Svs
Php Visao Geral Svs
cristhianobv
 
FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
iG - Internet Group do Brasil S/A
 

Mais procurados (20)

Descobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceDescobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performance
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Java
 
Ao infinito e além com PHP memcached e Gearman
Ao infinito e além com PHP memcached e GearmanAo infinito e além com PHP memcached e Gearman
Ao infinito e além com PHP memcached e Gearman
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEB
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - Nginx
 
JavaScript Applications
JavaScript ApplicationsJavaScript Applications
JavaScript Applications
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]
 
NGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webNGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação web
 
Redes servidor web
Redes servidor webRedes servidor web
Redes servidor web
 
Slides nginx
Slides nginxSlides nginx
Slides nginx
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015
 
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDBFlask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
 
Php Visao Geral Svs
Php Visao Geral SvsPhp Visao Geral Svs
Php Visao Geral Svs
 
FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
 

Destaque

Hack'Aveiro - 1º workshop - Introdução ao Arduino
Hack'Aveiro - 1º workshop - Introdução ao ArduinoHack'Aveiro - 1º workshop - Introdução ao Arduino
Hack'Aveiro - 1º workshop - Introdução ao Arduino
Diogo Gomes
 
IoT - Apps & Services
IoT - Apps & ServicesIoT - Apps & Services
IoT - Apps & Services
Diogo Gomes
 
Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017
Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017
Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017
Zoltan Kollin
 
Resource Optimizations for Broadcast enabled networks
Resource Optimizations for Broadcast enabled networksResource Optimizations for Broadcast enabled networks
Resource Optimizations for Broadcast enabled networks
Diogo Gomes
 
Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"
Diogo Gomes
 
Open Source &amp; Research
Open Source &amp; ResearchOpen Source &amp; Research
Open Source &amp; Research
Diogo Gomes
 
Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004
Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004
Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004
Michel Comtois
 
Multiple myeloma
Multiple myelomaMultiple myeloma
Multiple myeloma
Meenakshi Kaushik
 
Habitat choreography talk
Habitat choreography talkHabitat choreography talk
Habitat choreography talk
Ian Henry
 
Rebujos
RebujosRebujos
Rebujos
shak
 
Glosario dispositivos moviles
Glosario dispositivos movilesGlosario dispositivos moviles
Glosario dispositivos moviles
marco venegas
 
Pelvic inflammatory disease ppt
Pelvic inflammatory disease pptPelvic inflammatory disease ppt
Pelvic inflammatory disease ppt
Meenakshi Kaushik
 
Presentación dia de la mujer
Presentación dia de la mujerPresentación dia de la mujer
Presentación dia de la mujer
Valeria Rodriguez Leotta
 
Xinhua
Xinhua Xinhua
Xinhua
Jn Moncada
 
3Com 3CXFP94-OEM
3Com 3CXFP94-OEM3Com 3CXFP94-OEM
3Com 3CXFP94-OEM
savomir
 
3Com SUPERSTACK II ENTRY
3Com SUPERSTACK II ENTRY3Com SUPERSTACK II ENTRY
3Com SUPERSTACK II ENTRY
savomir
 
Nonfiction2016
Nonfiction2016Nonfiction2016
Nonfiction2016
kmperry
 
A Review on Antiphishing Framework
A Review on Antiphishing FrameworkA Review on Antiphishing Framework
A Review on Antiphishing Framework
IJAEMSJORNAL
 
3Com 02-0104-001 I I I
3Com 02-0104-001 I I I3Com 02-0104-001 I I I
3Com 02-0104-001 I I I
savomir
 
Presentacion cap.6
Presentacion cap.6Presentacion cap.6
Presentacion cap.6
Olga María Sarrio
 

Destaque (20)

Hack'Aveiro - 1º workshop - Introdução ao Arduino
Hack'Aveiro - 1º workshop - Introdução ao ArduinoHack'Aveiro - 1º workshop - Introdução ao Arduino
Hack'Aveiro - 1º workshop - Introdução ao Arduino
 
IoT - Apps & Services
IoT - Apps & ServicesIoT - Apps & Services
IoT - Apps & Services
 
Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017
Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017
Good design is... a myth - Zoltan Kollin - UX Copenhagen 2017
 
Resource Optimizations for Broadcast enabled networks
Resource Optimizations for Broadcast enabled networksResource Optimizations for Broadcast enabled networks
Resource Optimizations for Broadcast enabled networks
 
Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"Conversas 2.0@sapo.labs - "svn+code.ua"
Conversas 2.0@sapo.labs - "svn+code.ua"
 
Open Source &amp; Research
Open Source &amp; ResearchOpen Source &amp; Research
Open Source &amp; Research
 
Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004
Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004
Comparison between ANSI/BIFMA X 5.9 2012 and ANSI/BIFMA X 5.9 2004
 
Multiple myeloma
Multiple myelomaMultiple myeloma
Multiple myeloma
 
Habitat choreography talk
Habitat choreography talkHabitat choreography talk
Habitat choreography talk
 
Rebujos
RebujosRebujos
Rebujos
 
Glosario dispositivos moviles
Glosario dispositivos movilesGlosario dispositivos moviles
Glosario dispositivos moviles
 
Pelvic inflammatory disease ppt
Pelvic inflammatory disease pptPelvic inflammatory disease ppt
Pelvic inflammatory disease ppt
 
Presentación dia de la mujer
Presentación dia de la mujerPresentación dia de la mujer
Presentación dia de la mujer
 
Xinhua
Xinhua Xinhua
Xinhua
 
3Com 3CXFP94-OEM
3Com 3CXFP94-OEM3Com 3CXFP94-OEM
3Com 3CXFP94-OEM
 
3Com SUPERSTACK II ENTRY
3Com SUPERSTACK II ENTRY3Com SUPERSTACK II ENTRY
3Com SUPERSTACK II ENTRY
 
Nonfiction2016
Nonfiction2016Nonfiction2016
Nonfiction2016
 
A Review on Antiphishing Framework
A Review on Antiphishing FrameworkA Review on Antiphishing Framework
A Review on Antiphishing Framework
 
3Com 02-0104-001 I I I
3Com 02-0104-001 I I I3Com 02-0104-001 I I I
3Com 02-0104-001 I I I
 
Presentacion cap.6
Presentacion cap.6Presentacion cap.6
Presentacion cap.6
 

Semelhante a Rest workshop

Web Sphere
Web SphereWeb Sphere
Web Sphere
Fabricio Carvalho
 
Linguagem PHP para principiantes
Linguagem PHP para principiantesLinguagem PHP para principiantes
Linguagem PHP para principiantes
Marco Pinheiro
 
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
Comunidade NetPonto
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
Marcio Marinho
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
Wagner Roberto dos Santos
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
Helder da Rocha
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Lucas Brasilino
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
Douglas V. Pasqua
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
Igo Coelho
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
Mateus Malaquias
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
Gustavo Zadrozny Leyendecker
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia Introdutório
Fernando Palma
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
Alexandre Antunes
 
Minicurso Web. Front-end e HTML5 (parte 2)
Minicurso Web. Front-end e HTML5 (parte 2)Minicurso Web. Front-end e HTML5 (parte 2)
Minicurso Web. Front-end e HTML5 (parte 2)
Luiz Felipe Fernandes Machado Costa
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
Filipe Falcão
 
Nodejs Intro William Dias
Nodejs Intro William DiasNodejs Intro William Dias
Nodejs Intro William Dias
William Dias
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
Pablo Feijó
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
Mauro Risonho de Paula Assumpcao
 
Fundamentos de arquitetura Web
Fundamentos de arquitetura WebFundamentos de arquitetura Web
Fundamentos de arquitetura Web
Denis L Presciliano
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Emerson Macedo
 

Semelhante a Rest workshop (20)

Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Linguagem PHP para principiantes
Linguagem PHP para principiantesLinguagem PHP para principiantes
Linguagem PHP para principiantes
 
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
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia Introdutório
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
Minicurso Web. Front-end e HTML5 (parte 2)
Minicurso Web. Front-end e HTML5 (parte 2)Minicurso Web. Front-end e HTML5 (parte 2)
Minicurso Web. Front-end e HTML5 (parte 2)
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Nodejs Intro William Dias
Nodejs Intro William DiasNodejs Intro William Dias
Nodejs Intro William Dias
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
Fundamentos de arquitetura Web
Fundamentos de arquitetura WebFundamentos de arquitetura Web
Fundamentos de arquitetura Web
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 

Último

Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 

Último (7)

Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 

Rest workshop

  • 1. REST 101 REST Work Shop – 8 Março 2017 http://tutorials.jenkov.com/web-services/message-formats.h
  • 2. Protocolo HTTP  Protocolo Cliente- Servidor  Suportado em TCP  Popularizado em 1990 por Tim Berners-Lee  Criação da World Wide Web  Protocolo baseado em Texto
  • 3. HTTP Request GET / HTTP/1.1 Accept:*/* Accept-Language: en-gb Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSI 6.0) Host: www.ua.pt Connection: Keep-Alive HTTP Method URL relativo ou URL absoluto HTTP Version Cabeçalho
  • 4. HTTP Response HTTP/1.1 200 OK Server: Microsoft-IIS/7.5 Set-Cookie: ASP.NET_SessionId=5xf5yjpvgjhxdkzghywlabmu; path=/; HttpOnly Content-Type: text/html; charset=utf-8 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Connection: close Date: Sat, 22 Mar 2014 22:10:03 GMT Content-Length: 29298 Cache-Control: private X-WUA-SERVER: WUA-I2 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta http- equiv="Content-Type" content="text/html; charset=UTF-8" /><title> Universidade de Aveiro › Página inicial </title><script type="text/javascript" src="http://static.web.ua.pt/js/jquery/jquery- 1.10.2.min.js"></script><script type="text/javascript" src="http://static.web.ua.pt/js/uacookies/1/cookies.pt.min.js"></script><link href="images/ua.ico" rel="shortcut icon" /><link href="/css/menus.min.css" type="text/css" rel="Stylesheet" /><link href="/css/stylesheet.min.css" type="text/css" rel="Stylesheet" /><link id="ctl00_dinstyle" href="/css/dinStyle.aspx?css=dinStyle.css%26svr=uasite" type="text/css" rel="Stylesheet" /> Status line Cabeçalho Duplo CRLF (carriage return, line feed) Conteúdos pedidos
  • 5. Principais métodos HTTP  GET permite aceder a qualquer informação identificada pelo Request- URI  POST utilizado para enviar informação para o servidor
  • 6. Códigos de Status e Erro  1xx – Informacional – resposta intermédia que indica que o servidor ainda não acabou de processar o pedido  2xx – Bem sucedido  200 OK  3xx – Redireccionamento do cliente para outra localização  301-permanent, 302-temporary  4xx – Erro provocado pelo Cliente  400-bad request, 403-forbidden, 404-not found  5xx – Erro do Servidor  500 Internal Server Error, 503-Service Unavailable,504-Gateway Timeout
  • 8. Web App/Service  A criação de sites dinâmicos que se adaptam ao cliente podem ser alcançados: Manipulação local usando JS do DOM Frameworks populares: Angular, React Servidor serve conteúdos criados em função dos pedidos do cliente Frameworks populares: Django, ASP, Play (Java)
  • 9. Aplicação Web  O servidor recebe os dados vindos do cliente e processa os mesmos.  Pode gerar: Página Web com conteúdos personalizados Documento JSON Que pode ser processado no Web Browser Documento XML Que pode ser processado por outra aplicação (caso normal de um Web Service)
  • 10. O QUE É ISSO DE REST ?  Representational state transfer (REST) ou RESTful Web services  Alternativa a WSDL ou SOAP  Tem por base o protocolo HTTP e a sua semantica (GET, POST, DELETE, PUT)  Propriedades Arquitecturais:  Interface Uniforme  através de URI que identifica univocamente o recurso  Stateless  servidor não guarda informação de estado, todas informação necessária à operação é enviada ao cliente  Cacheable  Uma que vez que é stateless, a informação pode facilmente ser cached  Layered System  Como é stateless e cacheable é possivel escalar a solução através de camadas que incluem proxys e load- balancers  REST não é um standard, mas faz uso de standards (HTTP, JSON, XML)  Daí muitas coisas poderem ser chamadas de REST e não haver uma definição inequivoca.
  • 11. Exemplos: URL GET PUT POST DELETE http://api.deti. ua.pt/cursos LISTAR recursos SUBSTITUIR toda a colecção CRIAR uma nova entrada APAGAR a colecção http://api.deti. ua.pt/cursos/ miect CONSULTAR recurso SUBSTITUIR/ CRIAR o recurso SUBSTITUIR/ CRIAR o recurso APAGAR o recurso
  • 12. CherryPy  Framework Web Minimalista (Python)  Permite um desenvolvimento isolado  Sem recorrer a um servidor Web comum (Apache, NGINX)  “Tão simples como:”import cherrypy class HelloWorld(object): @cherrypy.expose def index(self): return "Hello World!" cherrypy.quickstart(HelloWorld())
  • 13. Not so simple…   Criar um VirtualEnv e instalar o cherrypy: $ virtualenv venv $ source venv/bin/activate $ pip install cherrypy  Executar e testar: $ python test.py Abrir o browser/ARC e colocar endereço: http://localhost:8080
  • 14. Mais do que uma função…  Acrescente ao index(self): print(cherrypy.request.headers) print(cherrypy.request.method)  E argumentos ? @cherrypy.expose def receptor(self, numero): return str(int(numero)*2)
  • 15. http://localhost:8080/miect/disciplinas /labi/ import cherrypy @cherrypy.popargs(‘curso’) class Curso(object): def __init__(self): self.disciplinas = Disciplina() @cherrypy.expose def index(self, curso): return “Sobre o curso de {}”.format(curso) @cherrypy.popargs(‘disciplina’) class Disciplina(object): @cherrypy.expose def index(self, curso, disciplina): return “{} do curso de {}”.format(disciplina, curso) cherrypy.quickstart(Curso())
  • 16. Então e os verbos HTTP ? import json import cherrypy @cherrypy.expose class StringGeneratorWebService(object): def __init__(self): self.curso = [] @cherrypy.tools.accept(media='text/json') def GET(self): return json.dumps(self.curso) def POST(self, cursos): self.curso = json.loads(cursos) def PUT(self, curso): self.curso.append(curso) def DELETE(self): self.curso = [] if __name__ == '__main__': conf = { '/': { 'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 'tools.response_headers.on': True, 'tools.response_headers.headers': [('Content-Type', 'text/plain')], } } cherrypy.quickstart(StringGeneratorWebService(), '/', conf)
  • 17. E como envio coisas ”a sério” ?  Codificar em JSON/XML class Root(object): @cherrypy.expose @cherrypy.tools.json_in() def index(self): data = cherrypy.request.json class Root(object): @cherrypy.expose @cherrypy.tools.json_out() def index(self): return {'key': 'value'}
  • 18. Então e como é que o meu programa faz pedidos ?  Requests: HTTP for Humans¶ Import requests r = requests.put('http://localhost:8080/', data = {'key':'value'}) r = requests.delete('http://localhost:8080/') r = requests.head('http://localhost:8080/') r = requests.options('http://localhost:8080/') r = requests.post('http://localhost:8080/', data=json.dumps(payload)) print(r.text)