接口API

Odoo可以通过接口对外提供服务,本章我们就来介绍一下如何使用API对外部系统提供接口。

基于Token的API服务

odoo 14.0版本以后原生提供了API KEY的生成机制。对于13.0版本之前的版本则没有,因此我们下面分为两部分来介绍基于Token的API调用。

13.0及之前的版本

基于 mommy_base 13.7.0+

首先我们到个人中心中创建一个访问Token:

11

设置完Token之后,将Token发给API的调用方。

14.0+版本

14.0+版本后,Odoo原生内置了Token的生成方式。首先打开开发者模式,然后到个人中心-账号设置-APIKEYS:

12

创建完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"
}

results matching ""

    No results matching ""