Web2py - Serviços
web2py fornece suporte para vários protocolos como XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC e SOAP. Cada um desses protocolos é suportado de várias maneiras, e fazemos uma distinção entre -
- Renderizar a saída de uma função em um determinado formato.
- Chamadas de procedimento remoto.
Renderizando um Dicionário
Considere o seguinte código que mantém a contagem das sessões.
def count():
session.counter = (session.counter or 0) + 1
return dict(counter = session.counter, now = request.now)
A função acima aumenta o número de contagens conforme e quando o usuário visita a página. Suponha que a função dada seja definida em“default.py”controlador da aplicação web2py. A página pode ser solicitada com o seguinte URL -http://127.0.0.1:8000/app/default/count
web2py pode renderizar a página acima em diferentes protocolos e adicionando extensão ao URL, como -
http://127.0.0.1:8000/app/default/count.html
http://127.0.0.1:8000/app/default/count.xml
http://127.0.0.1:8000/app/default/count.json
O dicionário retornado pela ação acima será renderizado em HTML, XML e JSON.
Chamadas de procedimento remoto
O framework web2py fornece um mecanismo que converte uma função em um serviço web. O mecanismo descrito aqui difere do mecanismo descrito antes porque -
- Inclusão de argumentos na função.
- A função deve ser definida em um modelo.
- Ele impõe uma convenção de nomenclatura de URL mais rígida.
- Ele funciona para um conjunto fixo de protocolos e é facilmente extensível.
- Para usar este recurso é necessário importar e iniciar um objeto de serviço.
Para implementar este mecanismo, primeiro você deve importar e instanciar um objeto de serviço.
from gluon.tools import Service
service = Service()
Isso é implementado no "db.py" arquivo de modelo no aplicativo de andaime. Db.py model é o modelo padrão no framework web2py, que interage com o banco de dados e o controlador para obter a saída desejada para os usuários.
Após a implementação, o serviço no modelo pode ser acessado a partir dos controladores conforme e quando necessário.
O exemplo a seguir mostra várias implementações de chamadas de procedimento remoto usando serviços da web e muito mais.
Serviços web
Os Web Services podem ser definidos como uma forma padronizada de integração de aplicativos baseados na Web usando protocolos como XML, SOAP, WSDL e UDDI.
web2py suporta a maioria deles, mas a integração será bem complicada.
Consumir um serviço JSON web2py com jQuery
Há muitas maneiras de retornar o formulário JSON web2py, mas aqui consideramos o caso de um serviço JSON. Por exemplo -
def consumer():return dict()@service.json
def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"]
def call():return service()
Aqui, observamos que -
a função apenas retorna um dicionário vazio para renderizar a visualização, o que consumirá o serviço.
get_days define o serviço e a chamada de função expõe todos os serviços registrados.
get_days não precisa estar no controlador e pode estar em um modelo.
call está sempre no controlador de estrutura default.py.
Ver com as ações do consumidor são as seguintes -
{{extend 'layout.html'}}
<div id = "target"></div>
<script>
jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
function(msg){
jQuery.each(msg, function(){ jQuery("#target").
append(this + "<br />"); } )
}
);
</script>
O primeiro argumento de jQuery.getJSON é o URL do seguinte serviço - http://127.0.0.1:8000/app/default/call/json/get_days
Isso sempre segue o padrão -
http://<domain>/<app>/<controller>/call/<type>/<service>
O URL está entre {{...}}, porque é resolvido no lado do servidor, enquanto todo o resto é executado no lado do cliente. O segundo argumento dejQuery.getJSON é um retorno de chamada, que receberá a resposta JSON.
Nesse caso, o retorno de chamada percorre cada item da resposta (uma lista de dias da semana como strings) e anexa cada string, seguido por um <br/> ao <div id = "target">.
Desta forma, web2py gerencia a implementação de serviços da web usando jQuery.getJSON.