Web2py - Servizi

web2py fornisce supporto per vari protocolli come XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC e SOAP. Ciascuno di questi protocolli è supportato in più modi e facciamo una distinzione tra:

  • Rendering dell'output di una funzione in un determinato formato.
  • Chiamate di procedura remota.

Rendering di un dizionario

Considera il codice seguente che mantiene il conteggio delle sessioni.

def count():
   session.counter = (session.counter or 0) + 1
   return dict(counter = session.counter, now = request.now)

La funzione precedente aumenta il numero di conteggi man mano che l'utente visita la pagina. Supponiamo che la funzione data sia definita in“default.py”controller dell'applicazione web2py. La pagina può essere richiesta con il seguente URL -http://127.0.0.1:8000/app/default/count

web2py può visualizzare la pagina sopra in diversi protocolli e aggiungendo estensioni all'URL, come -

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

Il dizionario restituito dall'azione precedente verrà visualizzato in HTML, XML e JSON.

Chiamate di procedura remota

Il framework web2py fornisce un meccanismo che converte una funzione in un servizio web. Il meccanismo qui descritto differisce dal meccanismo descritto prima perché:

  • Inclusione di argomenti in funzione.
  • La funzione deve essere definita in un modello.
  • Applica una convenzione di denominazione degli URL più rigida.
  • Funziona per un insieme fisso di protocolli ed è facilmente estensibile.
  • Per utilizzare questa funzionalità è necessario importare e avviare un oggetto servizio.

Per implementare questo meccanismo, inizialmente, è necessario importare e creare un'istanza di un oggetto di servizio.

from gluon.tools import Service
service = Service()

Questo è implementato in "db.py" file modello nell'applicazione ponteggi. Db.py model è il modello predefinito nel framework web2py, che interagisce con il database e il controller per ottenere l'output desiderato per gli utenti.

Dopo l'implementazione, è possibile accedere al servizio nel modello dai controller come e quando richiesto.

L'esempio seguente mostra varie implementazioni di chiamate di procedura remota utilizzando servizi Web e molti altri.

Servizi web

I servizi Web possono essere definiti come un modo standardizzato di integrare applicazioni basate sul Web utilizzando protocolli come XML, SOAP, WSDL e UDDI.

web2py ne supporta la maggior parte, ma l'integrazione sarà piuttosto complicata.

Consumare un servizio JSON web2py con jQuery

Ci sono molti modi per restituire JSON da web2py, ma qui consideriamo il caso di un servizio JSON. Ad esempio:

def consumer():return dict()@service.json
def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"]
def call():return service()

Qui, osserviamo che:

  • la funzione restituisce solo un dizionario vuoto per eseguire il rendering della vista, che consumerà il servizio.

  • get_days definisce il servizio e la chiamata di funzione espone tutti i servizi registrati.

  • get_days non è necessario che si trovi nel controller e può essere in un modello.

  • call è sempre nel controller di scaffolding default.py.

Le azioni di visualizzazione con il consumatore sono le seguenti:

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

Il primo argomento di jQuery.getJSON è l'URL del seguente servizio: http://127.0.0.1:8000/app/default/call/json/get_days

Questo segue sempre lo schema -

http://<domain>/<app>/<controller>/call/<type>/<service>

L'URL è nel mezzo {{...}}, perché viene risolto sul lato server, mentre tutto il resto viene eseguito sul lato client. Il secondo argomento dijQuery.getJSON è un callback, a cui verrà passata la risposta JSON.

In questo caso, la richiamata esegue un ciclo su ogni elemento nella risposta (un elenco di giorni della settimana come stringhe) e aggiunge ogni stringa, seguita da un <br/> al <div id = "target">.

In questo modo, web2py gestisce l'implementazione dei servizi web utilizzando jQuery.getJSON.