Web2py - Usługi

Platforma web2py zapewnia obsługę różnych protokołów, takich jak XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC i SOAP. Każdy z tych protokołów jest obsługiwany na wiele sposobów, a my rozróżniamy:

  • Renderowanie wyniku funkcji w podanym formacie.
  • Zdalne wywołania procedur.

Renderowanie słownika

Rozważmy następujący kod, który utrzymuje liczbę sesji.

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

Powyższa funkcja zwiększa liczbę zliczeń w momencie odwiedzania strony przez użytkownika. Załóżmy, że dana funkcja jest zdefiniowana w“default.py”kontroler aplikacji web2py. Stronę można zamówić pod następującym adresem URL -http://127.0.0.1:8000/app/default/count

Platforma web2py może renderować powyższą stronę w różnych protokołach i dodając rozszerzenie do adresu URL, takie jak -

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

Słownik zwrócony przez powyższą akcję zostanie wyrenderowany w formacie HTML, XML i JSON.

Zdalne wywołania procedur

Framework web2py zapewnia mechanizm, który przekształca funkcję w usługę sieciową. Opisany tutaj mechanizm różni się od mechanizmu opisanego wcześniej, ponieważ -

  • Włączenie argumentów do funkcji.
  • Funkcja musi być zdefiniowana w modelu.
  • Wymusza bardziej rygorystyczną konwencję nazewnictwa adresów URL.
  • Działa dla ustalonego zestawu protokołów i jest łatwo rozszerzalny.
  • Aby skorzystać z tej funkcji, konieczne jest zaimportowanie i zainicjowanie obiektu usługi.

Aby zaimplementować ten mechanizm, najpierw należy zaimportować obiekt usługi i utworzyć jego egzemplarz.

from gluon.tools import Service
service = Service()

Jest to zaimplementowane w "db.py" plik modelu w aplikacji rusztowania. Db.py model to domyślny model we frameworku web2py, który współdziała z bazą danych i kontrolerem w celu uzyskania pożądanych wyników dla użytkowników.

Po wdrożeniu usługa w modelu jest dostępna z kontrolerów w razie potrzeby.

Poniższy przykład przedstawia różne implementacje zdalnych wywołań procedur przy użyciu usług internetowych i wiele innych.

Usługi internetowe

Usługi sieciowe można zdefiniować jako ustandaryzowany sposób integracji aplikacji internetowych przy użyciu protokołów, takich jak XML, SOAP, WSDL i UDDI.

Platforma web2py obsługuje większość z nich, ale integracja będzie dość skomplikowana.

Korzystanie z usługi JSON web2py z jQuery

Istnieje wiele sposobów na zwrócenie formularza JSON web2py, ale tutaj rozważymy przypadek usługi JSON. Na przykład -

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

Tutaj obserwujemy, że -

  • funkcja po prostu zwraca pusty słownik, aby wyświetlić widok, który będzie zużywał usługę.

  • get_days definiuje usługę, a wywołanie funkcji ujawnia wszystkie zarejestrowane usługi.

  • get_days nie musi znajdować się w kontrolerze i może znajdować się w modelu.

  • call jest zawsze w kontrolerze szkieletu default.py.

Widok z działaniami konsumenckimi jest następujący -

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

Pierwszy argument jQuery.getJSON to adres URL następującej usługi - http://127.0.0.1:8000/app/default/call/json/get_days

To zawsze jest zgodne z wzorem -

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

Adres URL znajduje się pomiędzy {{...}}, ponieważ jest rozwiązywany po stronie serwera, podczas gdy wszystko inne jest wykonywane po stronie klienta. Drugi argumentjQuery.getJSON to wywołanie zwrotne, do którego zostanie przekazana odpowiedź JSON.

W tym przypadku wywołanie zwrotne zapętla każdy element w odpowiedzi (lista dni tygodnia jako ciągi znaków) i dołącza każdy ciąg, po którym następuje <br/> do <div id = "target">.

W ten sposób web2py zarządza implementacją usług internetowych przy użyciu jQuery.getJSON.