SlideShare ist ein Scribd-Unternehmen logo
1 von 19
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/

Weitere ähnliche Inhalte

Was ist angesagt?

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 performanceGustavo Ciello
 
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 Javaalexmacedo
 
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 GearmanElton Minetto
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBelliando 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çadoAdriano 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 - NginxThiago Paes
 
JavaScript Applications
JavaScript ApplicationsJavaScript Applications
JavaScript ApplicationsLuciano 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.jsNuno 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 webernaniaz
 
Redes servidor web
Redes servidor webRedes servidor web
Redes servidor webMauro Duarte
 
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çãoArtur Felipe Sousa
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015Adriano 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 MongoDBBruno Rocha
 
Php Visao Geral Svs
Php Visao Geral SvsPhp Visao Geral Svs
Php Visao Geral Svscristhianobv
 

Was ist angesagt? (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
 

Andere mochten auch

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 ArduinoDiogo Gomes
 
IoT - Apps & Services
IoT - Apps & ServicesIoT - Apps & Services
IoT - Apps & ServicesDiogo 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 2017Zoltan Kollin
 
Resource Optimizations for Broadcast enabled networks
Resource Optimizations for Broadcast enabled networksResource Optimizations for Broadcast enabled networks
Resource Optimizations for Broadcast enabled networksDiogo 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; ResearchDiogo 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 2004Michel Comtois
 
Habitat choreography talk
Habitat choreography talkHabitat choreography talk
Habitat choreography talkIan Henry
 
Rebujos
RebujosRebujos
Rebujosshak
 
Glosario dispositivos moviles
Glosario dispositivos movilesGlosario dispositivos moviles
Glosario dispositivos movilesmarco venegas
 
Pelvic inflammatory disease ppt
Pelvic inflammatory disease pptPelvic inflammatory disease ppt
Pelvic inflammatory disease pptMeenakshi Kaushik
 
3Com 3CXFP94-OEM
3Com 3CXFP94-OEM3Com 3CXFP94-OEM
3Com 3CXFP94-OEMsavomir
 
3Com SUPERSTACK II ENTRY
3Com SUPERSTACK II ENTRY3Com SUPERSTACK II ENTRY
3Com SUPERSTACK II ENTRYsavomir
 
Nonfiction2016
Nonfiction2016Nonfiction2016
Nonfiction2016kmperry
 
A Review on Antiphishing Framework
A Review on Antiphishing FrameworkA Review on Antiphishing Framework
A Review on Antiphishing FrameworkIJAEMSJORNAL
 
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 Isavomir
 

Andere mochten auch (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
 

Ähnlich wie Rest workshop

Linguagem PHP para principiantes
Linguagem PHP para principiantesLinguagem PHP para principiantes
Linguagem PHP para principiantesMarco 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 APIComunidade NetPonto
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio 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 MashupWagner 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 VarnishLucas Brasilino
 
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 ServletsIgo Coelho
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioFernando 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 androidAlexandre Antunes
 
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 utilizarFilipe Falcão
 
Nodejs Intro William Dias
Nodejs Intro William DiasNodejs Intro William Dias
Nodejs Intro William DiasWilliam Dias
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introduçãoPablo 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
 
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 2010Emerson Macedo
 

Ähnlich wie 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
 

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)