【odoo | JSON-RPC】无会话(session_id)控制的api,外部api密钥的另一种表现!

20 篇文章 0 订阅

概要

        在Odoo中,JSON-RPC(JSON Remote Procedure Call)是一种基于JSON格式的远程过程调用协议,用于客户端和服务器之间的通信。此文章将介绍 JSON-RPC中无会话(session_id)控制的api,也是外部api密钥的另一种表现方式。功能跟XML-RPC有异曲同工之妙,主要针对模型方法的外部调用(登录、增、删、改、查、自定义方法)。

主要使用场景

  • 轻量级应用:适用于轻量级应用和脚本,不需要复杂的会话管理。
  • 快速开发和测试:适用于开发和测试阶段,可以快速进行身份验证和方法调用。
  • 简单集成:适用于需要简单快速集成 Odoo 功能的场景,不需要维护复杂的会话状态。

调用方式 

tip:密钥生成可以查看文章odoo外部API解读,实现跨系统间的通讯!

登录

curl --request POST \
  --url http://127.0.0.1:8069/jsonrpc \
  --header 'content-type: application/json' \
  --data '{
	"jsonrpc": "2.0",
	"method": "call",
	"params": {
		"service": "common",
		"method": "login",
		"args": [
			"csdn_module_1",//数据库
			"admin",//账号
			"b9063d9993bbcc5cbddbb808dd4afb7044e74cd1"//密码/密钥
		]
	}
}
//注:登录后会返回uid,此uid在后续api中将替代账号使用,所以妥善保存。(此对接方式可以不用在conf文件指定数据库,因为此方式所有api都需带上基础登录参数)'


curl --request POST \
  --url http://127.0.0.1:8069/jsonrpc \
  --header 'content-type: application/json' \
  --data '{
	"jsonrpc": "2.0",
	"method": "call",
	"params": {
		"service": "object",
		"method": "execute_kw",
		"args": [
			"csdn_module_1",//数据库
			"2",//登录返回的uid
			"b9063d9993bbcc5cbddbb808dd4afb7044e74cd1",//密码或者密钥
			"res.partner",//模型名
			"create",//方法
			[
				[
					{ //对象里面就是创建数据的字段内容(这是第一条)
					"name": "李太华3",
					"user_id": 2, //多对一字段
					"child_ids": [ //一对多字段
						[
							0,
							0,
							{
								"name": "李飞11"
							}
						],
						[
							0,
							0,
							{
								"name": "李飞22"
							}
						],
						[
							0,
							0,
							{
								"name": "李飞33"
							}
						]
					]
				},
				{ //这是第二条
					"name": "李太华4",
					"user_id": 2,
					"child_ids": [
						[
							0,
							0,
							{
								"name": "李飞44"
							}
						],
						[
							0,
							0,
							{
								"name": "李飞55"
							}
						],
						[
							0,
							0,
							{
								"name": "李飞66"
							}
						]
					]
				}
				]
			],
			{
				"context": {
					"lang": "zh_CN" //建议传中文代码(不传则有时候会默认选择英文记录集)
				}
			}
		]
	},
	"id": 123456
}
//注:[0, 0, {"name": "李飞44"}]中参数含义
//[
//    [0, 0, {'\''product_id'\'': 1, '\''quantity'\'': 10}],    # 创建新记录
//    [1, 42, {'\''quantity'\'': 20}],                          # 更新 ID 为 42 的记录
//    [2, 43, False],                                           # 删除 ID 为 43 的记录
//    [3, 44, False],                                           # 解除与 ID 为 44 的记录的关联
//    [4, 45, False],                                           # 将 ID 为 45 的记录添加到关联中
//    [5, 0, 0],                                                # 清空所有关联记录
//    [6, 0, [46, 47]]                                          # 用 ID 为 46 和 47 的记录替换所有现有记录
//]'


curl --request POST \
  --url http://127.0.0.1:8069/jsonrpc \
  --header 'content-type: application/json' \
  --data '{
	"jsonrpc": "2.0",
	"method": "call",
	"params": {
		"service": "object",
		"method": "execute_kw",
		"args": [
			"csdn_module_1", //数据库
			"2", //登录返回的uid
			"b9063d9993bbcc5cbddbb808dd4afb7044e74cd1", //密码或者密钥
			"res.partner", //模型名
			"unlink", //方法
			[
				[ //数组删除多条
					72,
					47 //需要删除的记录id(多个则逗号隔开)
				]
			],
			{
				"context": {
					"lang": "zh_CN" //建议传中文代码(不传则有时候会默认选择英文记录集)
				}
			}
		]
	},
	"id": 123456
}'


curl --request POST \
  --url http://127.0.0.1:8069/jsonrpc \
  --header 'content-type: application/json' \
  --data '{
	"jsonrpc": "2.0",
	"method": "call",
	"params": {
		"service": "object",
		"method": "execute_kw",
		"args": [
			"csdn_module_1", //数据库
			"2", //登录返回的uid
			"b9063d9993bbcc5cbddbb808dd4afb7044e74cd1", //密码或者密钥
			"res.partner", //模型名
			"write", //方法
			[
				[
					58
				], //需要修改的记录主键id
				{ //需要修改的字段值(也可参考创建逻辑)
					"name": "李太华two",
					"user_id": 2,
					"child_ids": [
						[
							0,
							0,
							{
								"name": "李飞77"
							}
						] //可修改可创建,子数据创建也属于主表修改逻辑。(具体请看以下注意规则)
					]
				}
			],
			{
				"context": {
					"lang": "zh_CN" //建议传中文代码(不传则有时候会默认选择英文记录集)
				}
			}
		]
	},
	"id": 123456
}
//注:[0, 0, {"name": "李飞77"}]中参数含义
//[
//    [0, 0, {'\''product_id'\'': 1, '\''quantity'\'': 10}],    # 创建新记录
//    [1, 42, {'\''quantity'\'': 20}],                          # 更新 ID 为 42 的记录
//    [2, 43, False],                                           # 删除 ID 为 43 的记录
//    [3, 44, False],                                           # 解除与 ID 为 44 的记录的关联
//    [4, 45, False],                                           # 将 ID 为 45 的记录添加到关联中
//    [5, 0, 0],                                                # 清空所有关联记录
//    [6, 0, [46, 47]]                                          # 用 ID 为 46 和 47 的记录替换所有现有记录
//]'


curl --request POST \
  --url http://127.0.0.1:8069/jsonrpc \
  --header 'content-type: application/json' \
  --data '{
	"jsonrpc": "2.0",
	"method": "call",
	"params": {
		"service": "object",
		"method": "execute_kw",
		"args": [
			"csdn_module_1", //数据库
			"2", //登录返回的uid
			"b9063d9993bbcc5cbddbb808dd4afb7044e74cd1", //密码或者密钥
			"res.partner", //模型名
			"search_read", //方法
			[
				[ //过滤条件(跟后端domain一样写法,只是一个元组一个数组的区别)
					[
						"id",
						">",
						0
					],
					[
						"phone",
						"!=",
						false
					]
				]
			],
			{
				"offset": 0, //开始索引值
				"limit": 5, //查询条数
				"order": "phone ASC", //排序(ESC/DESC)
				"fields": [
					"id",
					"name",
					"phone"
				], //需要返回的字段,留空或不传则返回全部字段
				"context": {
					"lang": "zh_CN" //建议传中文代码(不传则有时候会默认选择英文记录集)
				}
			}
		]
	},
	"id": 123456
}'


自定义方法

curl --request POST \
  --url http://127.0.0.1:8069/jsonrpc \
  --header 'content-type: application/json' \
  --data '{
	"jsonrpc": "2.0",
	"method": "call",
	"params": {
		"service": "object",
		"method": "execute_kw",
		"args": [
			"csdn_module_1", //数据库
			"2", //登录返回的uid
			"b9063d9993bbcc5cbddbb808dd4afb7044e74cd1", //密码或者密钥
			"all.field.about", //模型名
			"get_demo_data", //方法
			[
				[]
			],
			{
				"context": {
					"lang": "zh_CN" //建议传中文代码(不传则有时候会默认选择英文记录集)
				}
			}
		]
	},
	"id": 123456
}
// 此方法在odoo中是这样的:
// def get_demo_data(self):
//     return {
//         '\''char_field'\'': '\''char_field'\'',
//         '\''text_field'\'': '\''text_field'\'',
//         '\''integer_field'\'': 1,
//     }'

小结

        多写多敲多思考,毕竟,知己知彼才能看懂源码。

Tip:本人才学尚浅,如有纰漏,还请不吝赐教!

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值