BatPlone e WebService: Uma dupla dinâmica - PDF
BatPlone e WebService: Uma dupla dinâmica
Download "BatPlone e WebService: Uma dupla dinâmica"
Victorio Peixoto Miranda
1 BatPlone e WebService: Uma dupla dinâmica Plone Symposium South America Brasília 2012
2 O que vamos abordar? - O que são e para que servem os WebServices? - Vantagens e Desvantagens - WebService SOAP vs Rest - Exemplos de Integração - Dicas de Otimização - Conclusões
3 O que são e para que servem os WebServices? WebService é uma solução utilizada na INTEGRAÇÃO de sistemas e na comunicação entre APLICAÇÕES DIFERENTES. Os WebServices são COMPONENTES que permitem às aplicações enviar e receber dados em formato XML(!). Cada aplicação pode ter a sua própria "linguagem", que é traduzida para uma linguagem universal, o formato XML(!). Aplicação A (Portal Plone) XML WebService Aplicação B (Sistema Legislativo em Java)
4 Vantagens e Desvantagens Vantagens - Permite a integração entre aplicação escritas em linguagens diferentes - Permite a integração de aplicações dispersas geograficamente (Internet) - Isolamento em camadas (negócio e apresentação) - Inteligível e intuitiva para o ser humano, o que facilita o desenvolvimento de novos aplicativos Desvantagens - Adiciona complexidade as aplicações - Segurança - Pode comprometer a performance da aplicação consumidora - Tipicamente o tamanho do pacote é muito superior aos dados efetivamente úteis
5 WebServices SOAP vs Rest SOAP Simple(?) Object Access Protocol Rest Representational State Transfer - Mais complexo, lento e pesado - Mais simples, rápido e leve - Mais Seguro (pacote fechado ) - Menos seguro (mais pode usar SSL/HTTPS) - Melhor para operações que precisam ser continuadas (Stateful) - Resultado XML, formatado por um WSDL - Melhor para operações isoladas (Stateless) - Pode ter qualquer formato, inclusive XML e JSON - Permite definição de tipos de dados - Todos os dados são do tipo STRING - Dificuldade para testar e fazer cache em Proxys HTTP - Facilidade para testar e fazer cache em Proxys HTTP - Tamanho do pacote de dados maior - Tamanho do pacote de dados menor
6 Exemplos de Integração - Google, Yahoo, Amazon, ebay, Buscapé - Câmara dos Deputados (Dados Abertos) package br.gov.camara; import javax.ws.rs.get; import javax.ws.rs.path; from bottle import route, def index(name='world'): return '<b>hello %s!</b>' % name run(host='localhost', public class public String sayplaintexthello() { return public String sayxmlhello() { return "<?xml version=\"1.0\"?>" + "<hello> Hello" + "</hello>"; public String sayhtmlhello() { return "<html> " + "<title>" + "Hello Jersey" + "</title>" + "<body><h1>" + "Hello" + "</body></h1>" + "</html> "; }
7 Exemplos de Integração # -*- coding: utf-8 -*- import SOAPpy from SOAPpy import SOAPProxy TIMEOUT = 60 class Webservices(BrowserView): def webservice_caller(self, wsdl, metodo, parametros, timeout = TIMEOUT, map = {}): if isinstance(parametros, dict) and parametros.get('timeout', None) is not None: timeout = parametros['timeout'] SOAPpy.Config.methodAttributeParameters = map p = SOAPpy.WSDL.Proxy(wsdl, timeout = timeout) if isinstance(parametros, dict): ret = getattr(p, metodo)(**parametros) else: if not isinstance(parametros, tuple): parametros = (parametros,) ret = getattr(p, metodo)(*parametros) return ret
8 Exemplos de Integração # -*- coding: utf-8 -*- from restful_lib import Connection import simplejson, urllib class Webservices(BrowserView): def restful_caller(self, url, metodo, parametros, http_metodo): try: conn = Connection(url) except: return 'Erro na conexão com ' + url ret = None if http_metodo.upper() == 'GET': try: headers = {'Content-type': 'text/xml', 'Accept':'text/xml'} ret = conn.request_get(resource = metodo, args = parametros, headers) except: ret = 'ERRO na chamada metodo ' + metodo return ret def wsrestful_json_caller(self, url, parametros): url = url + '?' + urllib.urlencode(parametros) result = simplejson.load(urllib.urlopen(url)) return result
9 Exemplos de Integração def ws_obtemlistadeputados(self): dados = [] parms=() try: dados = self.webservice_caller(wsdl=self.url_wsdl, metodo='obtemdeputados', parametros=parms) except Exception, ex: pass return dados parms=(primeiraletra,codlotacao) webservices = wsdl = getattr(context,'webserviceserver')+'?wsdl' metodo='listadeputados' o = webservices.webservice_caller(wsdl,metodo,parametros=parms, timeout=60) return o ws = return ws.wsrestful_json_caller(url, cidade=goiania )
10 Dicas de Utilização - Uso de Cache em diferentes níveis > Proxy > Zope > MemCached - WebServices otimizados e que tragam apenas as informações pertinentes - Usuários de BD com permissões restritas - Ajustar o timeout ou usar de forma Assincrona
11 Conclusões - Se utilizada da forma correta é uma solução eficaz - Avaliar sempre se não seria possível uma abordagem mais direta (Ex: SqlAlchemy) - Sempre que possível, utilizar REST
12 Obrigado Fábio Surrage de Medeiros Rafahela Bazzanella, Clayton Caetano, Wilton Alencar
Integração de Sis temas Legados com Plone
Integração de Sis temas Legados com Plone Integração d e Sistem as Legad os com Plone Fabiano Weimar dos Santos [Xiru] x iru@xiru.org II PyCon Brasil - 2006 Interlegis - Brasília - DF O que irem os ver?
Minicurso Web Services com PHP
Minicurso Vinícius Costa de Souza viniciuscs@unisinos.br http://www.inf.unisinos.br/~vinicius julho de 2005 Apresentações Nome Conhecimentos sobre Web Services Conhecimentos sobre PHP Expectativas referentes
Desenvolvendo um Mashup com a API do Google Maps e com os dados de uma imobiliária
1 Desenvolvendo um Mashup com a API do Google Maps e com os dados de uma imobiliária Luiz Henrique Rocha e Costa Departamento de Informática Universidade Estadual de Maringá (UEM) Av. Colombo, 5.790 -
Manual de Integração Sumário 1 Introdução... 3 2 Terminologias... 3 3 Links do projeto...3 3.1 WSDL de Assinatura...3 3.2 WSDL de Notificação...3 3.3 WS-Signer e AP-Samples...3 4 Autenticação...3 5 Serviços
Plataforma para es JATLite - Java Template, Lite O que é o JATLite? http://java.stanford.edu/ http://www.fe.up.pt/~eol/aiad/jatlite/doc/index.html Pacote de programas em Java permitindo: rápida criação
Treinamento Python/Zope/Plone. terça-feira, 4 de agosto de 15
Treinamento Python/Zope/Plone Apresentação Luiz Gustavo da Fonseca Ferreira Formação e experiência: Ciência da Computação (UFMG) Mestrado em Ciência da Informação (UFMG) Doutorando em Ciência da Informação
Uma Arquitectura Web para Serviços Web
Uma Arquitectura Web para Serviços Web Sérgio Nunes 1 e Gabriel David 2 1 FLUP 2 FEUP/INESC-Porto Universidade do Porto Porto, Portugal Resumo A evolução dos Serviços Web foi, nos últimos tempos, controlada
Produto: ATU-PM Jacson Tiola da Silva Termo de Referência no 128543 Contrato Número no 2008/000485 Brasília, 30 de Outubro de 2008 1 Sumário 1) Introdução...3 2) Migração do Portal Modelo...3 2.1) Script