Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Rest workshop

247 visualizaciones

Publicado el

Introdução ao REST usando CherryPy (Python)

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

Rest workshop

  1. 1. REST 101 REST Work Shop – 8 Março 2017 http://tutorials.jenkov.com/web-services/message-formats.h
  2. 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. 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. 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. 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. 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
  7. 7. Resumindo…
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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)
  19. 19. Referências  https://www.ietf.org/rfc/rfc2616.txt  http://docs.cherrypy.org/en/latest/  http://docs.python- requests.org/en/master/

×