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.requestjson. 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ư: