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
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)
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)