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

news2024/11/23 1:38:32

概要

        在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:本人才学尚浅,如有纰漏,还请不吝赐教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1841224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux基础IO】重定向以及原理分析

我们先来看下面一个情况&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define filename "text.txt"int main(){close(1);//关…

差分数组汇总

本文涉及知识点 算法与数据结构汇总 差分数组 令 a[i] ∑ j : 0 i v D i f f [ i ] \sum_{j:0}^{i}vDiff[i] ∑j:0i​vDiff[i] 如果 vDiff[i1]&#xff0c;则a[i1…]全部 如果vDiff[i2]–,则a[i2…]全部–。 令11 < i2 &#xff0c;则&#xff1a; { a [ i ] 不变&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 身高差值排序(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

重学java 77.JDK新特性 ③ Stream流

The road is long,it can be really hard.Whatever you do,you hold on to that foolishly hopeful smile —— 24.6.19 Stream流 stream流中的"流"不是特指"IO流",它是一种"流式编程"(编程方式),可以看做是"流水线 package S109Stream;im…

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

【全文档】软件项目经理需要掌握的文档有哪些?

软件项目经理在项目管理过程中需要编写多种文档&#xff0c;以下是常见的十五个文档&#xff1a; 项目计划&#xff1a; 详细描述了项目的范围、时间、成本、资源、沟通计划等关键信息&#xff0c;是项目管理的核心文档。 需求文档&#xff1a; 记录了项目的业务需求、功能需求…

VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。

官方文档地址&#xff1a;documents 官方项目地址&#xff1a;github 欢迎安装使用&#xff0c;分享转发&#xff0c;前往github star。 跨平台&#xff0c;支持Windows&#xff0c;Linux&#xff0c;MacOS支持多种语言和工具&#xff0c;省心受到lazygit的启发&#xff0c;拥…

【stm32-新建工程-CubeMX】

stm32-新建工程-CubeMX ■ CubeMX 生产工程 ■ CubeMX 生产工程

数据库 |试卷八试卷九试卷十

1.基数是指元组的个数 2.游标机制 3.触发器自动调用 4.count(*)统计所有行&#xff0c;不忽略空值null&#xff0c;但不但要全局扫描&#xff0c;也要对表的每个字段进行扫描&#xff1b; 5.eacherNO INT NOT NULL UNIQUE&#xff0c;为什么不能断定TeacherNO是主码&#xff…

JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

前言 在上一节中&#xff0c;我们简单介绍了 TCP 协议的相关概念和格式&#xff0c;而且还介绍了TCP 协议原理中的 确认应答机制、超时重传机制&#xff0c;在本节中我们将会继续介绍 TCP协议原理中的其他机制。 连接管理机制&#xff08;安全机制&#xff09; 在正常情况下&…

数学建模基础:统计模型

目录 前言 一、概率与统计基础 二、统计模型 三、Matlab统计工具箱 四、实例示范&#xff1a;市场调查分析 步骤 1&#xff1a;数据导入 步骤 2&#xff1a;数据可视化 步骤 3&#xff1a;建立多元线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&#xff1a;模型应…

Java学习 (二)关键字、标识符、数组

一、关键字 我们第一章案例中有很多关键字&#xff0c;比如class、public、static、void等&#xff0c;这些关键字依旧被java定义好了&#xff0c;可以拿来用&#xff0c;不需要死记硬背&#xff0c;按照官方文档查询即可 #官方文档 https://docs.oracle.com/javase/tutorial/j…

高速公路收费图片分析系统深入理解

当今社会&#xff0c;随着交通运输业的快速发展&#xff0c;高速公路已成为人们出行的重要选择。而高速公路收费系统作为保障道路可持续运营的重要组成部分&#xff0c;其效率和准确性对于保障道路畅通和交通安全至关重要。近年来&#xff0c;随着技术的不断进步&#xff0c;高…

elasticsearch的安装和配置

单节点安装与部署 我们通过docker进行安装 1.docker的安装 如果以及安装了docker就可以跳过这个步骤。 首先更新yum: yum update安装docker: yum install docker查看docker的版本&#xff1a; docker -v此时我们的docker就安装成功了。 2.创建网络 我们还需要部署kiban…

【VMware】VMware虚拟机安装_配置_使用教程

一、准备工作 1、下载VMware软件&#xff1a;访问VMware官方网站&#xff0c;下载适合你操作系统的VMware Workstation Pro安装包。 下载地址&#xff1a;VMware Desktop Hypervisors for Windows, Linux, and Mac 2、准备操作系统镜像文件&#xff1a;根据你想要在虚拟机中安…

读AI新生:破解人机共存密码笔记06人工智能生态系统

1. 深蓝 1.1. “深蓝”的胜利虽然令人印象深刻&#xff0c;但它只是延续了几十年来显而易见的趋势 1.2. 国际象棋算法的基本设计是由克劳德香农在1950年提出的 1.2.1. 这一基本设计在20世纪60年代初实现了重大改进 1.2.2. 最优秀的国际象棋程序的等级评分稳步提高&#xff…

数据分析第十二讲 数据可视化入门(一)

数据可视化入门&#xff08;一&#xff09; 在完成了对数据的透视之后&#xff0c;我们可以将数据透视的结果通过可视化的方式呈现出来&#xff0c;简单的说&#xff0c;就是将数据变成漂亮的统计图表&#xff0c;因为人类对颜色和形状会更加敏感&#xff0c;然后再进一步解读…

ChinaTravel成流量密码,景区如何打造视频监控管理平台提升旅游体验

随着中国经济的飞速发展和人民生活水平的持续提高&#xff0c;旅游已经成为越来越多人休闲放松的首选方式。近期&#xff0c;随着互联网的普及和社交媒体的兴起&#xff0c;以及免签政策带火入境游&#xff0c;“ChinaTravel”已成为社交网络上的一大流量密码&#xff0c;吸引了…

数学建模基础:非线性模型

目录 前言 一、非线性方程组 二、非线性规划 三、微分方程模型 四、非线性模型的应用 五、实例示范&#xff1a;传染病传播模型 实例总结 五、总结 前言 非线性模型用于描述变量之间的非线性关系&#xff0c;相比线性模型&#xff0c;其数学形式更为复杂&#xff0c;但…

操作系统真象还原:输入输出系统

第10章-输入输出系统 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 10.1 同步机制–锁 10.1.1 排查GP异常&#xff0c;理解原子操作 线程调度工作的核心内容就是线程的上下文保护&#xff0b;上下文恢复 。 根本原因是访问公共资源需要多个操作&…