Web2py - Layanan

web2py menyediakan dukungan untuk berbagai protokol seperti XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC, dan SOAP. Masing-masing protokol tersebut didukung dalam berbagai cara, dan kami membuat perbedaan antara -

  • Merender keluaran suatu fungsi dalam format tertentu.
  • Panggilan Prosedur Jarak Jauh.

Merender Kamus

Pertimbangkan kode berikut yang mempertahankan jumlah sesi.

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

Fungsi di atas meningkatkan jumlah hitungan saat pengguna mengunjungi halaman. Misalkan fungsi yang diberikan didefinisikan dalam“default.py”pengontrol aplikasi web2py. Halaman dapat diminta dengan URL berikut -http://127.0.0.1:8000/app/default/count

web2py dapat membuat halaman di atas dalam protokol yang berbeda dan dengan menambahkan ekstensi ke URL, seperti -

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

Kamus yang dikembalikan oleh tindakan di atas akan dirender dalam HTML, XML dan JSON.

Panggilan Prosedur Jarak Jauh

Kerangka web2py menyediakan mekanisme yang mengubah fungsi menjadi layanan web. Mekanisme yang dijelaskan di sini berbeda dari mekanisme yang dijelaskan sebelumnya karena -

  • Pencantuman argumen dalam fungsi.
  • Fungsi harus ditentukan dalam model.
  • Ini memberlakukan konvensi penamaan URL yang lebih ketat.
  • Ia bekerja untuk satu set protokol tetap dan mudah diperluas.
  • Untuk menggunakan fitur ini, Anda perlu mengimpor dan memulai objek layanan.

Untuk mengimplementasikan mekanisme ini, pertama-tama, Anda harus mengimpor dan membuat instance objek layanan.

from gluon.tools import Service
service = Service()

Ini diimplementasikan di "db.py" file model di aplikasi scaffolding. Db.py model adalah model default dalam kerangka web2py, yang berinteraksi dengan database dan pengontrol untuk mencapai keluaran yang diinginkan bagi pengguna.

Setelah diimplementasikan, layanan dalam model dapat diakses dari pengontrol jika diperlukan.

Contoh berikut menunjukkan berbagai implementasi panggilan prosedur jarak jauh menggunakan layanan web dan banyak lagi.

Layanan web

Layanan Web dapat didefinisikan sebagai cara standar untuk mengintegrasikan aplikasi berbasis Web menggunakan protokol seperti XML, SOAP, WSDL dan UDDI.

web2py mendukung sebagian besar dari mereka, tetapi integrasinya akan cukup rumit.

Mengkonsumsi layanan JSON web2py dengan jQuery

Ada banyak cara untuk mengembalikan bentuk JSON web2py, tetapi di sini kami mempertimbangkan kasus layanan JSON. Misalnya -

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

Di sini, kami mengamati bahwa -

  • fungsi hanya mengembalikan kamus kosong untuk membuat tampilan, yang akan menggunakan layanan.

  • get_days mendefinisikan layanan, dan panggilan fungsi mengekspos semua layanan terdaftar.

  • get_days tidak perlu di controller, dan bisa di model.

  • call selalu dalam kontroler scaffolding default.py.

Tampilan dengan tindakan konsumen adalah sebagai berikut -

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

Argumen pertama dari jQuery.getJSON adalah URL dari layanan berikut - http://127.0.0.1:8000/app/default/call/json/get_days

Ini selalu mengikuti pola -

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

URL ada di antaranya {{...}}, karena diselesaikan di sisi server, sementara yang lainnya dijalankan di sisi klien. Argumen kedua darijQuery.getJSON adalah callback, yang akan meneruskan respons JSON.

Dalam kasus ini, callback mengulang setiap item dalam respons (daftar hari kerja sebagai string), dan menambahkan setiap string, diikuti dengan <br/> ke <div id = "target">.

Dengan cara ini, web2py mengelola implementasi layanan web menggunakan jQuery.getJSON.