借助此插件,您可以使用此插件开发自己的高级REST API,用于Odoo。
项目描述
此插件提供开发Odoo高级REST API的基础。
随着Odoo成为企业IT系统的核心之一,常常需要设置专门的服务接口,以便现有系统可以与Odoo交互。
虽然在这种情况下Odoo的XML-RPC接口很有用,但它需要深入了解Odoo的内部数据模型。当广泛使用时,它会在Odoo内部和客户端系统之间创建强耦合,从而增加维护成本。
目录
配置
如果在调用服务方法(例如缺少参数)时发生错误,系统将仅返回对问题的一般描述而没有详细信息。这是故意为之,以确保实现细节的最大透明度,从而降低安全问题。
当服务由开发中的外部系统访问时,此限制可能会出现问题。要了解错误的详细信息,确实需要访问服务器的日志。并不总是可能提供此类访问。这就是为什么您可以配置服务器以在开发模式下运行这些服务。
要在开发模式下运行REST API,您必须在服务器配置文件中添加一个新的部分“[base_rest]”,并包含选项“dev_mode=True”。
[base_rest]
dev_mode=True
当REST API在开发模式下运行时,在出现错误的情况下将返回原始描述和堆栈跟踪。请小心不要在生产环境中使用此模式。
用法
要添加自己的REST服务,您必须提供至少2个类。
一个提供您服务业务逻辑的组件,
一个用于注册您服务的控制器。
您服务的业务逻辑必须实现到一个组件中(odoo.addons.component.core.Component),该组件继承自‘base.rest.service’
from odoo.addons.component.core import Component
class PingService(Component):
_inherit = 'base.rest.service'
_name = 'ping.service'
_usage = 'ping'
_collection = 'my_module.services'
# The following method are 'public' and can be called from the controller.
def get(self, _id, message):
return {
'response': 'Get called with message ' + message}
def search(self, message):
return {
'response': 'Search called search with message ' + message}
def update(self, _id, message):
return {'response': 'PUT called with message ' + message}
# pylint:disable=method-required-super
def create(self, **params):
return {'response': 'POST called with message ' + params['message']}
def delete(self, _id):
return {'response': 'DELETE called with id %s ' % _id}
# Validator
def _validator_search(self):
return {'message': {'type': 'string'}}
# Validator
def _validator_get(self):
# no parameters by default
return {}
def _validator_update(self):
return {'message': {'type': 'string'}}
def _validator_create(self):
return {'message': {'type': 'string'}}
一旦您实现了服务(ping等),您必须告诉Odoo如何访问这些服务。这个过程通过实现一个继承自odoo.addons.base_rest.controllers.main.RestController的控制器来完成
from odoo.addons.base_rest.controllers import main
class MyRestController(main.RestController):
_root_path = '/my_services_api/'
_collection_name = my_module.services
在您的控制器中,'_root_path'用于指定访问您服务的路径根,'_collection_name'是提供请求服务业务逻辑的集合名称
通过继承自RestController,以下路由将被注册以访问您的服务
@route([
ROOT_PATH + '<string:_service_name>',
ROOT_PATH + '<string:_service_name>/search',
ROOT_PATH + '<string:_service_name>/<int:_id>',
ROOT_PATH + '<string:_service_name>/<int:_id>/get'
], methods=['GET'], auth="user", csrf=False)
def get(self, _service_name, _id=None, **params):
method_name = 'get' if _id else 'search'
return self._process_method(_service_name, method_name, _id, params)
@route([
ROOT_PATH + '<string:_service_name>',
ROOT_PATH + '<string:_service_name>/<string:method_name>',
ROOT_PATH + '<string:_service_name>/<int:_id>',
ROOT_PATH + '<string:_service_name>/<int:_id>/<string:method_name>'
], methods=['POST'], auth="user", csrf=False)
def modify(self, _service_name, _id=None, method_name=None, **params):
if not method_name:
method_name = 'update' if _id else 'create'
if method_name == 'get':
_logger.error("HTTP POST with method name 'get' is not allowed. "
"(service name: %s)", _service_name)
raise BadRequest()
return self._process_method(_service_name, method_name, _id, params)
@route([
ROOT_PATH + '<string:_service_name>/<int:_id>',
], methods=['PUT'], auth="user", csrf=False)
def update(self, _service_name, _id, **params):
return self._process_method(_service_name, 'update', _id, params)
@route([
ROOT_PATH + '<string:_service_name>/<int:_id>',
], methods=['DELETE'], auth="user", csrf=False)
def delete(self, _service_name, _id):
return self._process_method(_service_name, 'delete', _id)
HTTP GET 'http://my_odoo/my_services_api/ping'将被调度到方法PingService.search
已知问题/路线图
变更日志
10.0.2.0.1
_validator_…()方法现在可以返回一个cerberus Validator对象,而不是一个模式字典,以提供额外的灵活性(例如,允许验证器选项如allow_unknown)。
10.0.2.0.0
许可证从AGPL-3更改为LGPL-3
10.0.1.0.1
修复了在未提供REST API中方法部分的文档时渲染jsonapi文档时的问题。
10.0.1.0.0
首个官方版本。该插件已孵化到Akretion的Shopinvader仓库。有关更多信息,请查看git日志。
错误跟踪器
错误在GitHub问题中跟踪。如果遇到问题,请检查是否已报告您的问题。如果您是第一个发现它的人,请通过提供详细且受欢迎的反馈来帮助我们解决这个问题。
请不要直接联系贡献者以获取支持或帮助解决技术问题。
鸣谢
贡献者
Laurent Mignon <laurent.mignon@acsone.eu>
Sébastien Beau <sebastien.beau@akretion.com>
维护者
本模块由OCA维护。
OCA,或Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并促进其广泛应用。
当前维护者
本模块是GitHub上OCA/rest-framework项目的组成部分。
欢迎您贡献力量。要了解如何做,请访问https://odoo-community.org/page/Contribute。
项目详情
散列值 for odoo10_addon_base_rest-10.0.2.2.0-py2-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | c20d4fd4d584fe1054c743a1264e634beabc951810ca52ccc5938ca51c9aef0d |
|
MD5 | 9ef74064c507fd2e510ce231d3f59e20 |
|
BLAKE2b-256 | 6cca3db08dd800fe9fbb5c2b21e9f5dcac7b2a747c7a4317cff70ee1727a8a50 |