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.