Web2py - सेवाएँ

web2py XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC और SOAP जैसे विभिन्न प्रोटोकॉल के लिए समर्थन प्रदान करता है। उनमें से प्रत्येक प्रोटोकॉल को कई तरीकों से समर्थित किया गया है, और हम इसके बीच अंतर करते हैं -

  • किसी दिए गए प्रारूप में फ़ंक्शन के आउटपुट का प्रतिपादन।
  • दूरस्थ प्रक्रिया कॉल।

एक शब्दकोश का प्रतिपादन

निम्नलिखित कोड पर विचार करें जो सत्रों की गिनती को बनाए रखता है।

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

उपर्युक्त फ़ंक्शन उपयोगकर्ता के पेज पर आने के साथ ही संख्या में वृद्धि करता है। मान लीजिए दिए गए फ़ंक्शन को परिभाषित किया गया है“default.py”web2py अनुप्रयोग का नियंत्रक। पृष्ठ का अनुरोध निम्न URL से किया जा सकता है -http://127.0.0.1:8000/app/default/count

web2py उपरोक्त पेज को अलग-अलग प्रोटोकॉल में और URL में एक्सटेंशन जोड़कर रेंडर कर सकता है, जैसे -

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

उपरोक्त कार्रवाई द्वारा लौटाए गए शब्दकोश को HTML, XML और JSON में प्रस्तुत किया जाएगा।

दूरस्थ प्रक्रिया कॉल

web2py फ्रेमवर्क एक तंत्र प्रदान करता है जो एक फ़ंक्शन को वेब सेवा में परिवर्तित करता है। यहाँ वर्णित तंत्र पहले वर्णित तंत्र से भिन्न है क्योंकि -

  • फ़ंक्शन में तर्कों का समावेश।
  • फ़ंक्शन को एक मॉडल में परिभाषित किया जाना चाहिए।
  • यह एक अधिक सख्त URL नामकरण सम्मेलन को लागू करता है।
  • यह प्रोटोकॉल के एक निश्चित सेट के लिए काम करता है और यह आसानी से एक्स्टेंसिबल है।
  • इस सुविधा का उपयोग करने के लिए सेवा वस्तु को आयात करना और आरंभ करना आवश्यक है।

इस तंत्र को लागू करने के लिए, सबसे पहले, आपको एक सेवा ऑब्जेक्ट को आयात और तत्काल करना होगा।

from gluon.tools import Service
service = Service()

में लागू किया गया है "db.py" मचान अनुप्रयोग में मॉडल फ़ाइल। Db.py मॉडल web2py फ्रेमवर्क में डिफ़ॉल्ट मॉडल है, जो उपयोगकर्ताओं को वांछित आउटपुट प्राप्त करने के लिए डेटाबेस और नियंत्रक के साथ बातचीत करता है।

लागू करने के बाद, जब आवश्यक हो, मॉडल में सेवा को नियंत्रकों से एक्सेस किया जा सकता है।

निम्न उदाहरण वेब सेवाओं और कई और अधिक का उपयोग करके दूरस्थ प्रक्रिया कॉल के विभिन्न कार्यान्वयन दिखाता है।

वेब सेवाएं

XML, SOAP, WSDL और UDDI जैसे प्रोटोकॉल का उपयोग करके वेब-आधारित अनुप्रयोगों को एकीकृत करने के मानकीकृत तरीके के रूप में वेब सेवाओं को परिभाषित किया जा सकता है।

web2py उनमें से ज्यादातर का समर्थन करता है, लेकिन एकीकरण काफी मुश्किल होगा।

JQuery के साथ एक web2py JSON सेवा का उपभोग करना

JSON फॉर्म web2py को वापस करने के कई तरीके हैं, लेकिन यहां हम JSON सेवा के मामले पर विचार करते हैं। उदाहरण के लिए -

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

यहाँ, हम देखते हैं कि -

  • फ़ंक्शन दृश्य को प्रस्तुत करने के लिए सिर्फ एक खाली शब्दकोश देता है, जो सेवा का उपभोग करेगा।

  • get_days सेवा को परिभाषित करता है, और फ़ंक्शन कॉल सभी पंजीकृत सेवाओं को उजागर करता है।

  • get_days नियंत्रक में होने की जरूरत नहीं है, और एक मॉडल में हो सकता है।

  • call डिफ़ॉल्ट डिफ़ॉल्ट मचान नियंत्रक में हमेशा होता है।

उपभोक्ता कार्यों के साथ देखें निम्नानुसार हैं -

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

का पहला तर्क jQuery.getJSON निम्नलिखित सेवा का URL है - http://127.0.0.1:8000/app/default/call/json/get_days

यह हमेशा पैटर्न का अनुसरण करता है -

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

बीच में URL है {{...}}, क्योंकि यह सर्वर-साइड पर हल किया जाता है, जबकि क्लाइंट-साइड में बाकी सब निष्पादित होता है। का दूसरा तर्कjQuery.getJSON एक कॉलबैक है, जिसे JSON प्रतिक्रिया दी जाएगी।

इस स्थिति में, कॉलबैक प्रतिक्रिया में प्रत्येक आइटम पर लूप करता है (स्ट्रिंग्स के रूप में सप्ताह के दिनों की एक सूची), और प्रत्येक स्ट्रिंग को जोड़ता है, उसके बाद एक <br/> को <div id = "target">

इस तरह, web2py वेब सेवाओं के उपयोग का कार्यान्वयन करता है jQuery.getJSON