Web2py - Dịch vụ

web2py cung cấp hỗ trợ cho các giao thức khác nhau như XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC và SOAP. Mỗi giao thức đó được hỗ trợ theo nhiều cách và chúng tôi phân biệt giữa -

  • Kết xuất đầu ra của một hàm ở một định dạng nhất định.
  • Các cuộc gọi thủ tục từ xa.

Hiển thị từ điển

Hãy xem xét đoạn mã sau để duy trì số lượng phiên.

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

Hàm trên làm tăng số lượng khi và khi người dùng truy cập trang. Giả sử hàm đã cho được định nghĩa trong“default.py”bộ điều khiển của ứng dụng web2py. Trang có thể được yêu cầu bằng URL sau:http://127.0.0.1:8000/app/default/count

web2py có thể hiển thị trang trên theo các giao thức khác nhau và bằng cách thêm phần mở rộng vào URL, như -

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

Từ điển được trả về bởi hành động trên sẽ được hiển thị dưới dạng HTML, XML và JSON.

Cuộc gọi thủ tục từ xa

web2py framework cung cấp một cơ chế chuyển đổi một chức năng thành một dịch vụ web. Cơ chế được mô tả ở đây khác với cơ chế được mô tả trước đây vì -

  • Bao gồm các đối số trong hàm.
  • Hàm phải được định nghĩa trong một mô hình.
  • Nó thực thi một quy ước đặt tên URL nghiêm ngặt hơn.
  • Nó hoạt động cho một tập hợp các giao thức cố định và nó có thể dễ dàng mở rộng.
  • Để sử dụng tính năng này, cần phải nhập và khởi tạo một đối tượng dịch vụ.

Để thực hiện cơ chế này, trước tiên, bạn phải nhập và khởi tạo một đối tượng dịch vụ.

from gluon.tools import Service
service = Service()

Điều này được thực hiện trong "db.py" tập tin mô hình trong ứng dụng giàn giáo. Db.py mô hình là mô hình mặc định trong khuôn khổ web2py, tương tác với cơ sở dữ liệu và bộ điều khiển để đạt được đầu ra mong muốn cho người dùng.

Sau khi triển khai, dịch vụ trong mô hình có thể được truy cập từ bộ điều khiển khi được yêu cầu.

Ví dụ sau đây cho thấy các cách triển khai khác nhau của các lệnh gọi thủ tục từ xa sử dụng các dịch vụ web và nhiều hơn nữa.

Dịch vụ web

Dịch vụ Web có thể được định nghĩa là một cách tiêu chuẩn hóa để tích hợp các ứng dụng dựa trên Web bằng cách sử dụng các giao thức như XML, SOAP, WSDL và UDDI.

web2py hỗ trợ hầu hết chúng, nhưng việc tích hợp sẽ khá phức tạp.

Sử dụng dịch vụ JSON web2py với jQuery

Có nhiều cách để trả về web2py biểu mẫu JSON, nhưng ở đây chúng tôi xem xét trường hợp của một dịch vụ JSON. Ví dụ -

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

Ở đây, chúng tôi nhận thấy rằng -

  • hàm chỉ trả về một từ điển trống để hiển thị chế độ xem, điều này sẽ sử dụng dịch vụ.

  • get_days xác định dịch vụ và lệnh gọi hàm hiển thị tất cả các dịch vụ đã đăng ký.

  • get_days không cần phải ở trong bộ điều khiển và có thể ở trong một mô hình.

  • call luôn nằm trong bộ điều khiển giàn giáo default.py.

Xem với các hành động của người tiêu dùng như sau:

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

Đối số đầu tiên của jQuery.getJSON là URL của dịch vụ sau - http://127.0.0.1:8000/app/default/call/json/get_days

Điều này luôn tuân theo mô hình -

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

URL ở giữa {{...}}, bởi vì nó được giải quyết ở phía máy chủ, trong khi mọi thứ khác được thực thi ở phía máy khách. Đối số thứ hai củajQuery.getJSON là một lệnh gọi lại, sẽ được chuyển cho phản hồi JSON.

Trong trường hợp này, lệnh gọi lại lặp lại từng mục trong phản hồi (danh sách các ngày trong tuần dưới dạng chuỗi) và nối mỗi chuỗi, theo sau là <br/> đến <div id = "target">.

Theo cách này, web2py quản lý việc triển khai các dịch vụ web bằng cách sử dụng jQuery.getJSON.