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.