+ All Categories
Home > Technology > Rest workshop

Rest workshop

Date post: 12-Apr-2017
Category:
Upload: diogo-gomes
View: 130 times
Download: 0 times
Share this document with a friend
19
REST 101 REST Work Shop – 8 Março 2017 http://tutorials.jenkov.com/web-services/message-form
Transcript
Page 1: Rest workshop

REST 101REST Work Shop – 8 Março 2017

http://tutorials.jenkov.com/web-services/message-formats.html

Page 2: Rest workshop

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

Page 3: Rest workshop

HTTP Request

GET / HTTP/1.1Accept:*/*               Accept-Language: en-gbAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSI 6.0)Host: www.ua.ptConnection: Keep-Alive

HTTP Method URL relativo ou URL absoluto

HTTP Version

Cabeçalho

Page 4: Rest workshop

HTTP Response

HTTP/1.1 200 OKServer: Microsoft-IIS/7.5Set-Cookie: ASP.NET_SessionId=5xf5yjpvgjhxdkzghywlabmu; path=/; HttpOnlyContent-Type: text/html; charset=utf-8X-AspNet-Version: 4.0.30319X-Powered-By: ASP.NETConnection: closeDate: Sat, 22 Mar 2014 22:10:03 GMTContent-Length: 29298Cache-Control: privateX-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

Page 5: Rest workshop

Principais métodos HTTP GET permite aceder a qualquer

informação identificada pelo Request-URI

POST utilizado para enviar informação para o servidor

Page 6: Rest workshop

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

Page 7: Rest workshop

Resumindo…

Page 8: Rest workshop

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

DOMFrameworks populares: Angular, React

Servidor serve conteúdos criados em função dos pedidos do clienteFrameworks populares: Django, ASP, Play (Java)

Page 9: Rest workshop

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)

Page 10: Rest workshop

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.

Page 11: Rest workshop

Exemplos:URL GET PUT POST DELETEhttp://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

Page 12: Rest workshop

CherryPy Framework Web Minimalista (Python) Permite um desenvolvimento isolado

Sem recorrer a um servidor Web comum (Apache, NGINX)

“Tão simples como:”import cherrypyclass HelloWorld(object):

@cherrypy.expose def index(self): return "Hello World!"

cherrypy.quickstart(HelloWorld())

Page 13: Rest workshop

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

Page 14: Rest workshop

Mais do que uma função… Acrescente ao index(self):print(cherrypy.request.headers)print(cherrypy.request.method)

E argumentos [email protected] receptor(self, numero):    return str(int(numero)*2)   

Page 15: Rest workshop

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

Page 16: Rest workshop

Então e os verbos HTTP ?import jsonimport cherrypy

@cherrypy.exposeclass 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)

Page 17: Rest workshop

E como envio coisas ”a sério” ? Codificar em JSON/XMLclass 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'}

Page 18: Rest workshop

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)


Recommended