การใช้งาน Restful API

การใช้งาน Restful API

หลายคนคงรู้จักกับ Web Service API ในลักษณะของ XMLRPC หรือ JSONRPC มาบ้างจากเอกสารของ Odoo
https://www.odoo.com/documentation/13.0/webservices/odoo.html

แต่ในปัจจุบัน Restful API เป็นที่นิยมใช้กันมากกว่า แม้ว่าจะไม่อยู่ใน Odoo ตามมาตรฐาน OCA ก็มีคำตอบให้เราเหมือนเช่นเคย 🙂

ด้วย OCA Restful Framework – https://github.com/OCA/rest-framework

  • base_rest :: เป็นโมดูลพื้นฐานที่สามารถนำไปสร้าง RESTFUL API ได้อย่างง่ายๆ
  • base_rest_demo :: ตัวอย่างในการสร้าง ทั้งแบบ public และ private API
  • Youtube และ Slide
โดยหลังจากที่ติดั้งโมดูลทั้งสองระบบจะมี Icon REST api ซึ่งจะแสดงหน้าต่างการทดสอบ API ทั้งหมดที่มี Odoo ได้ทันที

สำหรับตัวอย่างเต็มสำหรับ partner ลองดูได้ที่ไฟล์ base_rest_demo/services/partner_services.py ซึ่งหากเราลองทำโดยเลียนแบบก็จะไม่ได้ยากอะไร แต่ผมมีข้อสังเกตุเพิ่มเติมดังนี้
  • REST API ทำงานได้กับทั้ง GET, POST, PUT และ DELETE แต่หากลองทำเราจะได้เห็นว่า สำหรับ method GET ระบบจะให้ใช้ได้กับ เฉพาะ get กับ search เท่านั้น ทั้งนี้เป็นเพราะการเขียน route ไว้ที่นี่ https://github.com/OCA/rest-framework/tree/12.0/base_rest#usage โดยให้ดูในส่วน ResController
  • ทุก API จะต้องมีการเขียน function _validate กำกับไว้ด้วยเพื่อให้แน่ใจว่าได้ schema ทั้ง input และ output ตามชุดข้อมูลที่ควรเป็น
  • ในโหมดปกติจะไม่มี detailed error message เวลาเกิดปัญหา ถ้าต้องการให้รันใน debug mode โดยประกาศไว้ที่ Odoo config file
[base_rest]
dev_mode=True
  • สำหรับ private method การ authenticate ทำได้ตามตัวอย่างนี้
import requests

# create a session
sess = requests.session()

# login into odoo
data = {"jsonrpc": "2.0", "method": "call", "params": {"db":"odoo-base_rest_product","login":"admin","password":"admin"}}
sess.post('http://localhost:8069/web/session/authenticate', json=data)

# use this session to call your services (in this case I've a product service implementing search withour required params)
res = sess.get('http://localhost:8069/rest_api/private/product/search')
print(res.json())
ตอนนี้คงไม่ได้เขียนลงรายละเอียดมากนักนะครับ เพราะตัวโมดูลเอง และตัวอย่างก็ดูค่อนง่ายอยู่แล้ว หากได้ใช้งานในเคสจริง และมีข้อสังเกตุเพิ่มเติมจะนำมาใส่ไว้ตอนนี้
About the Author

Leave a Reply