Web2py - Hizmetler

web2py, XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC ve SOAP gibi çeşitli protokoller için destek sağlar. Bu protokollerin her biri birden fazla şekilde desteklenir ve aşağıdakiler arasında bir ayrım yaparız -

  • Bir işlevin çıktısını belirli bir biçimde işleme.
  • Uzaktan Prosedür Çağrıları.

Sözlük Oluşturmak

Oturum sayısını koruyan aşağıdaki kodu göz önünde bulundurun.

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

Yukarıdaki işlev, kullanıcı sayfayı ziyaret ettikçe ve ziyaret ettiğinde sayıların sayısını artırır. Verilen işlevin şu şekilde tanımlandığını varsayalım:“default.py”web2py uygulamasının denetleyicisi. Sayfa aşağıdaki URL ile talep edilebilir -http://127.0.0.1:8000/app/default/count

web2py, yukarıdaki sayfayı farklı protokollerde ve URL'ye uzantı ekleyerek, örneğin -

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

Yukarıdaki eylem tarafından döndürülen sözlük HTML, XML ve JSON'da oluşturulacaktır.

Uzaktan Prosedür Çağrıları

web2py çerçevesi, bir işlevi bir web hizmetine dönüştüren bir mekanizma sağlar. Burada açıklanan mekanizma, daha önce açıklanan mekanizmadan farklıdır çünkü -

  • Fonksiyona argümanların dahil edilmesi.
  • İşlev bir modelde tanımlanmalıdır.
  • Daha katı bir URL adlandırma kuralı uygular.
  • Sabit bir protokol seti için çalışır ve kolayca genişletilebilir.
  • Bu özelliği kullanmak için bir hizmet nesnesini içe aktarmak ve başlatmak gerekir.

Bu mekanizmayı uygulamak için, önce bir hizmet nesnesini içe aktarmalı ve başlatmalısınız.

from gluon.tools import Service
service = Service()

Bu, "db.py" iskele uygulamasında model dosyası. Db.py model, kullanıcılara istenen çıktıyı elde etmek için veritabanı ve denetleyici ile etkileşime giren web2py çerçevesindeki varsayılan modeldir.

Uygulandıktan sonra modeldeki hizmete kontrolörlerden istenildiği zaman ve gerektiği zaman erişilebilir.

Aşağıdaki örnek, web hizmetlerini ve daha fazlasını kullanan uzaktan prosedür çağrılarının çeşitli uygulamalarını göstermektedir.

Ağ hizmetleri

Web Hizmetleri, XML, SOAP, WSDL ve UDDI gibi protokolleri kullanarak Web tabanlı uygulamaları entegre etmenin standart bir yolu olarak tanımlanabilir.

web2py bunların çoğunu destekler, ancak entegrasyon oldukça zor olacaktır.

JQuery ile bir web2py JSON hizmeti kullanma

JSON formunu web2py'ye döndürmenin birçok yolu vardır, ancak burada bir JSON hizmeti durumunu ele alıyoruz. Örneğin -

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

Burada şunu görüyoruz -

  • işlev, görünümü oluşturmak için yalnızca boş bir sözlük döndürür ve bu da hizmeti tüketir.

  • get_days servisi tanımlar ve fonksiyon çağrısı tüm kayıtlı servisleri ortaya çıkarır.

  • get_days denetleyicide olması gerekmez ve bir modelde olabilir.

  • call her zaman default.py iskele denetleyicisindedir.

Tüketici eylemleri ile görüş aşağıdaki gibidir -

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

İlk argüman jQuery.getJSON aşağıdaki hizmetin URL'sidir - http://127.0.0.1:8000/app/default/call/json/get_days

Bu her zaman kalıbı takip eder -

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

URL ikisinin arasında {{...}}çünkü diğer her şey istemci tarafında yürütülürken sunucu tarafında çözülür. İkinci argümanjQuery.getJSON JSON yanıtından geçecek bir geri aramadır.

Bu durumda, geri çağırma yanıttaki her bir öğe üzerinde döngü yapar (dizeler olarak hafta günlerinin listesi) ve her dizeyi, ardından bir <br/> için <div id = "target">.

Bu şekilde web2py, web hizmetlerinin uygulanmasını jQuery.getJSON.