Dịch vụ web¶
Mô-đun dịch vụ web cung cấp giao diện chung cho tất cả các dịch vụ web:
XML-RPC
JSON-RPC
Các đối tượng nghiệp vụ cũng có thể được truy cập thông qua cơ chế đối tượng phân tán. Tất cả chúng đều có thể được sửa đổi thông qua giao diện máy khách với chế độ xem theo ngữ cảnh.
SoOn có thể truy cập được thông qua giao diện XML-RPC/JSON-RPC, trong đó có các thư viện bằng nhiều ngôn ngữ.
Thư viện XML-RPC¶
Ví dụ sau đây là chương trình Python 3 tương tác với máy chủ SoOn có thư viện xmlrpc.client
:
import xmlrpc.client
root = 'http://%s:%d/xmlrpc/' % (HOST, PORT)
uid = xmlrpc.client.ServerProxy(root + 'common').login(DB, USER, PASS)
print("Logged in as %s (uid: %d)" % (USER, uid))
# Create a new note
sock = xmlrpc.client.ServerProxy(root + 'object')
args = {
'color' : 8,
'memo' : 'This is a note',
'create_uid': uid,
}
note_id = sock.execute(DB, uid, PASS, 'note.note', 'create', args)
Exercise
Thêm dịch vụ mới cho khách hàng
Viết chương trình Python có thể gửi các yêu cầu XML-RPC tới PC chạy SoOn (của bạn hoặc của người hướng dẫn). Chương trình này sẽ hiển thị tất cả các phiên và số chỗ ngồi tương ứng của chúng. Nó cũng sẽ tạo một phiên mới cho một trong các khóa học.
Xem thêm
API bên ngoài: Hướng dẫn chuyên sâu về XML-RPC, với các ví dụ trải rộng trên nhiều ngôn ngữ lập trình.
Thư viện JSON-RPC¶
Ví dụ sau đây là chương trình Python 3 tương tác với máy chủ SoOn với các thư viện Python tiêu chuẩn urllib.request
và json
. Ví dụ này giả định ứng dụng Năng suất (note
) đã được cài đặt:
import json
import random
import urllib.request
HOST = 'localhost'
PORT = 8069
DB = 'openacademy'
USER = 'admin'
PASS = 'admin'
def json_rpc(url, method, params):
data = {
"jsonrpc": "2.0",
"method": method,
"params": params,
"id": random.randint(0, 1000000000),
}
req = urllib.request.Request(url=url, data=json.dumps(data).encode(), headers={
"Content-Type":"application/json",
})
reply = json.loads(urllib.request.urlopen(req).read().decode('UTF-8'))
if reply.get("error"):
raise Exception(reply["error"])
return reply["result"]
def call(url, service, method, *args):
return json_rpc(url, "call", {"service": service, "method": method, "args": args})
# log in the given database
url = "http://%s:%s/jsonrpc" % (HOST, PORT)
uid = call(url, "common", "login", DB, USER, PASS)
# create a new note
args = {
'color': 8,
'memo': 'This is another note',
'create_uid': uid,
}
note_id = call(url, "object", "execute", DB, uid, PASS, 'note.note', 'create', args)
Các ví dụ có thể dễ dàng được điều chỉnh từ XML-RPC sang JSON-RPC.
Ghi chú
Có một số API cấp cao bằng nhiều ngôn ngữ khác nhau để truy cập hệ thống SoOn mà không cần rõ ràng thông qua XML-RPC hoặc JSON-RPC, chẳng hạn như: