接口API
Odoo可以通过接口对外提供服务,本章我们就来介绍一下如何使用API对外部系统提供接口。
基于Token的API服务
odoo 14.0版本以后原生提供了API KEY的生成机制。对于13.0版本之前的版本则没有,因此我们下面分为两部分来介绍基于Token的API调用。
13.0及之前的版本
基于 mommy_base 13.7.0+
首先我们到个人中心中创建一个访问Token:
设置完Token之后,将Token发给API的调用方。
14.0+版本
14.0+版本后,Odoo原生内置了Token的生成方式。首先打开开发者模式,然后到个人中心-账号设置-APIKEYS:
创建完Token,然后复制后发给API调用方即可。
Token的认证
前面我们介绍了Token的生成方式,那么下面我们来看一下如何在接口中使用Token认证。为了简化Token的认证逻辑,我们将其认证逻辑封装到了auth认证方式中,用户只需要简单地将auth的值写为token即可。
@http.route('/api/login', type='json_raw', auth='token', methods=['POST'], csrf=False)
def handle_request(self, **kwargs):
...
外部用户在调用的时候,需要使用Bearer Token的认证方式,将Token填写到Header中即可。
{
"Authorization":"Bearer 1234567890"
}
JSONRAW的声明
Odoo原生的json方式的返回格式通常为:
{
"jsonrpc":"2.0",
"id":null,
"result":2
}
这对外部系统的开发人员来说可能不够友好,因此我们在基础解决方案中对此进行了更新。用户可以通过将controller中的type声明为json_raw的方式,将返回值变为原始的json。
@http.route('/api/login', type='json_raw', auth='token', methods=['POST'], csrf=False)
def handle_request(self, **kwargs):
"""
Handle incoming API requests.
"""
# Process the request and return a response
return {"hello": "world"}
这种方式将返回json的原始数据:
{
"hello": "world"
}