Web2py - Dienste

web2py bietet Unterstützung für verschiedene Protokolle wie XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC und SOAP. Jedes dieser Protokolle wird auf verschiedene Arten unterstützt, und wir unterscheiden zwischen -

  • Rendern der Ausgabe einer Funktion in einem bestimmten Format.
  • Remote Procedure Calls.

Wörterbuch rendern

Betrachten Sie den folgenden Code, der die Anzahl der Sitzungen beibehält.

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

Die obige Funktion erhöht die Anzahl der Zählungen, wenn der Benutzer die Seite besucht. Angenommen, die angegebene Funktion ist in definiert“default.py”Controller der web2py-Anwendung. Die Seite kann unter folgender URL angefordert werden:http://127.0.0.1:8000/app/default/count

web2py kann die obige Seite in verschiedenen Protokollen und durch Hinzufügen einer Erweiterung zur URL rendern, wie z.

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

Das von der obigen Aktion zurückgegebene Wörterbuch wird in HTML, XML und JSON gerendert.

Remote Procedure Calls

Das web2py-Framework bietet einen Mechanismus, der eine Funktion in einen Webdienst konvertiert. Der hier beschriebene Mechanismus unterscheidet sich von dem zuvor beschriebenen Mechanismus, weil -

  • Einbeziehung von Argumenten in die Funktion.
  • Die Funktion muss in einem Modell definiert sein.
  • Es erzwingt eine strengere URL-Namenskonvention.
  • Es funktioniert für einen festen Satz von Protokollen und ist leicht erweiterbar.
  • Um diese Funktion nutzen zu können, muss ein Serviceobjekt importiert und initiiert werden.

Um diesen Mechanismus zu implementieren, müssen Sie zunächst ein Serviceobjekt importieren und instanziieren.

from gluon.tools import Service
service = Service()

Dies ist in der implementiert "db.py" Modelldatei in der Gerüstanwendung. Db.py model ist das Standardmodell im web2py-Framework, das mit der Datenbank und dem Controller interagiert, um die gewünschte Ausgabe für die Benutzer zu erzielen.

Nach der Implementierung kann bei Bedarf von den Controllern auf den Service im Modell zugegriffen werden.

Das folgende Beispiel zeigt verschiedene Implementierungen von Remoteprozeduraufrufen mithilfe von Webdiensten und vielem mehr.

Internetdienste

Web Services können als standardisierte Methode zur Integration webbasierter Anwendungen mithilfe von Protokollen wie XML, SOAP, WSDL und UDDI definiert werden.

web2py unterstützt die meisten von ihnen, aber die Integration wird ziemlich schwierig sein.

Konsumieren eines web2py-JSON-Dienstes mit jQuery

Es gibt viele Möglichkeiten, JSON von web2py zurückzugeben, aber hier betrachten wir den Fall eines JSON-Dienstes. Zum Beispiel -

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

Hier beobachten wir, dass -

  • Die Funktion gibt nur ein leeres Wörterbuch zurück, um die Ansicht zu rendern, die den Dienst verbraucht.

  • get_days Definiert den Dienst und der Funktionsaufruf macht alle registrierten Dienste verfügbar.

  • get_days muss nicht in der Steuerung sein und kann in einem Modell sein.

  • call befindet sich immer in der Gerüststeuerung default.py.

Ansicht mit den Verbraucheraktionen sind wie folgt -

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

Das erste Argument von jQuery.getJSON ist die URL des folgenden Dienstes - http://127.0.0.1:8000/app/default/call/json/get_days

Dies folgt immer dem Muster -

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

Die URL liegt dazwischen {{...}}, weil es auf der Serverseite aufgelöst wird, während alles andere auf der Clientseite ausgeführt wird. Das zweite Argument vonjQuery.getJSON ist ein Rückruf, dem die JSON-Antwort übergeben wird.

In diesem Fall durchläuft der Rückruf jedes Element in der Antwort (eine Liste von Wochentagen als Zeichenfolgen) und hängt jede Zeichenfolge an, gefolgt von a <br/> zum <div id = "target">.

Auf diese Weise verwaltet web2py die Implementierung von Webdiensten mithilfe von jQuery.getJSON.