Tutorial Odoo 9.0 Part 15 : WebServices

จาก Morange Wiki
รุ่นแก้ไขเมื่อ 17:40, 19 กรกฎาคม 2559 โดย Bombay (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย '== ทำ WebService == * จะเป็นรูปแบบมาตราฐานเป็นแบบนี้ - XML-RPC - JSON-R...')
(ต่าง) ←รุ่นแก้ไขก่อนหน้า | รุ่นแก้ไขล่าสุด (ต่าง) | รุ่นแก้ไขถัดไป→ (ต่าง)

ทำ WebService

  • จะเป็นรูปแบบมาตราฐานเป็นแบบนี้

- XML-RPC - JSON-RPC

XML-RPC

  • สร้างไฟล์ python ขึ้นมา และใส่ Code ลงไปดังนี้
  • แก้ DB, USER, PASS ตามที่ Setting
import functools
import xmlrpclib
HOST = 'localhost'
PORT = 8069
DB = 'openacademy'
USER = 'admin'
PASS = 'admin'
ROOT = 'http://%s:%d/xmlrpc/' % (HOST,PORT)

# 1. Login
uid = xmlrpclib.ServerProxy(ROOT + 'common').login(DB,USER,PASS)
print "Logged in as %s (uid:%d)" % (USER,uid)

call = functools.partial(
    xmlrpclib.ServerProxy(ROOT + 'object').execute,
    DB, uid, PASS)

# 2. Read the sessions
sessions = call('openacademy.session','search_read', [], ['name','seats'])
for session in sessions:
    print "Session %s (%s seats)" % (session['name'], session['seats'])
# 3.create a new session
session_id = call('openacademy.session', 'create', {
    'name' : 'My session',
    'course_id' : 2,
})
  • เมื่อเขียนเสร็จแล้ว ใช้คำสั่งรันบน command line
python <ชื่อไฟล์>
  • จะได้ผลลัพธ์ดังนี้

DeepinScreenshot20160720003404.png

JSON-RPC

  • เขียนโปรแกรม python เหมือนตัวอย่างข้างบนใช้ Code ตามนี้
import json
import random
import urllib2

def json_rpc(url, method, params):
    data = {
        "jsonrpc": "2.0",
        "method": method,
        "params": params,
        "id": random.randint(0, 1000000000),
    }
    req = urllib2.Request(url=url, data=json.dumps(data), headers={
        "Content-Type":"application/json",
    })
    reply = json.load(urllib2.urlopen(req))
    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)