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 framework จัดเตรียมกลไกที่แปลงฟังก์ชันเป็นบริการบนเว็บ กลไกที่อธิบายไว้ที่นี่แตกต่างจากกลไกที่อธิบายไว้ก่อนหน้านี้เนื่องจาก -

  • การรวมอาร์กิวเมนต์ในฟังก์ชัน
  • ต้องกำหนดฟังก์ชันในแบบจำลอง
  • มันบังคับใช้หลักการตั้งชื่อ URL ที่เข้มงวดมากขึ้น
  • ใช้งานได้กับชุดโปรโตคอลคงที่และสามารถขยายได้ง่าย
  • ในการใช้คุณสมบัตินี้จำเป็นต้องอิมพอร์ตและเริ่มต้นเซอร์วิสอ็อบเจ็กต์

ในการใช้กลไกนี้ในตอนแรกคุณต้องอิมพอร์ตและสร้างอินสแตนซ์อ็อบเจ็กต์บริการ

from gluon.tools import Service
service = Service()

สิ่งนี้ถูกนำไปใช้ในไฟล์ "db.py" ไฟล์โมเดลในแอปพลิเคชันนั่งร้าน Db.py model เป็นโมเดลเริ่มต้นใน web2py framework ซึ่งโต้ตอบกับฐานข้อมูลและคอนโทรลเลอร์เพื่อให้ได้ผลลัพธ์ที่ต้องการสำหรับผู้ใช้

หลังจากใช้งานแล้วบริการในโมเดลสามารถเข้าถึงได้จากคอนโทรลเลอร์ตามที่ต้องการ

ตัวอย่างต่อไปนี้แสดงการใช้งานการเรียกโพรซีเดอร์ระยะไกลโดยใช้บริการเว็บและอื่น ๆ อีกมากมาย

บริการเว็บ

Web Services สามารถกำหนดเป็นวิธีมาตรฐานในการรวมแอปพลิเคชันบนเว็บโดยใช้โปรโตคอลเช่น XML, SOAP, WSDL และ UDDI

web2py รองรับส่วนใหญ่ แต่การผสานรวมจะค่อนข้างยุ่งยาก

การใช้บริการ web2py JSON ด้วย jQuery

มีหลายวิธีในการส่งคืน 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 อยู่ในตัวควบคุมนั่งร้าน default.py เสมอ

ดูด้วยการกระทำของผู้บริโภคมีดังนี้ -

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