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

概要

        在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.rhkb.cn/news/354389.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度文心智能体平台(想象即现实):轻松上手,开启智能新时代!创建属于自己的智能体应用。

目录 1.1、文心智能体平台 1.2、创建智能体 1.3、智能体报名入口 1.4、古诗词小助手 1.5、访问我的智能体 在这个全新的时代里,人工智能技术正以前所未有的速度发展,渗透到我们生活的方方面面。无论是智能家居、自动驾驶,还是医疗诊断、…

深入探讨:UART与USART在单片机中串口的实际应用与实现技巧

单片机(Microcontroller Unit, MCU)是一种集成了处理器、存储器和输入输出接口的微型计算机。它广泛应用于嵌入式系统中,用于控制各类电子设备。UART和USART是单片机中常见的通信接口,负责串行数据传输。下面我们详细介绍它们在单…

【LeetCode:394. 字符串解码 + 栈 | 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Sqlite3数据库基本使用

一、基本概念 数据:能够输入计算机并能被计算机程序识别和处理的信息集合 数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合 DBMS:位于用户与操作系统之间的一层数据管理软件,用于操纵和管理数据库 二、安装 在线…

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约 源码下载:https://download.csdn.net/download/m0_66047725/89402192 更多资源下载:关注我。

【OceanBase诊断调优】 —— DDL时报磁盘不足问题排查

1. 背景 由于在4.x的部分版本中,我们对于一些ddl操作还存在磁盘空间放大问题,本文主要介绍了这一类问题的排查。 2. 问题排查 2.1 整体排查链路 2.2 问题现象 DDL过程中报磁盘空间不足,需要确认是否符合预期,如果是符合预期&a…

1980python个性化电影推荐管理系统mysql数据库Django结构layUI布局elasticsearch存储计算机软件工程网页

一、源码特点 python Django个性化电影推荐管理系统是一套完善的web设计系统mysql数据库 利用elasticsearch存储浏览数据 ,对理解python编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 开发环境pycharm…

基于STM32的智能水产养殖系统(四)

硬件原理 步进电动机 步进电动机(Step Motor 或 Stepper Motor)是一种将电脉冲信号转换成对应的角位移或线位移的电动机。与普通电动机不同,步进电动机每接收到一个脉冲信号,就会按设定的角度(步距角)转动…

定制汽车霍尔传感器

磁电效应霍尔传感器、饱和霍尔传感器、非线性霍尔传感器 霍尔传感器原理 霍尔传感器的工作原理基于霍尔效应,即当一块通有电流的金属或半导体薄片垂直地放在磁场中时,薄片的两端会产生电位差。这种现象称为霍尔效应,两端具有的电位差值称为…

STM32通过I2C软件读写MPU6050

文章目录​​​​​​​ 1. MPU6050 1.1 运动学概念 1.2 工作原理 2. 参数 2.1 量程选择 2.2 I2C从机地址配置 3. 硬件电路 4. 框架图 5. 软件和硬件波形对比 6. 软件I2C读写MPU6050 6.1 程序整体构架 6.2 一些需要注意的点: 6.3 MPU6050初始化配置 6…

【Python/Pytorch 】-- 滑动窗口算法

文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面 写这个算法原因是:训练了一个时序网络,该网络模型的时序维度为32,而测试数据的时序维度为90。因此需要采用滑动窗口的方法,生成一系列32…

第58章SOCKET:TCP/IP网络基础

58.1 互联网 互联网会将不同的计算机网络连接起来并允许位于网络中的主机相互之间进行通信。互联网的目标是隐藏不同物理网络的细节以便向互联网中的所有主机呈现一个统一的网络架构,TCP/IP已经成了使用最为广泛的协议套件了, 术语Internet被用来指将全球…

【STM32-启动文件】

STM32-启动文件 ■ STM32-启动文件■ STM32-启动文件主要做了以下工作:■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■■■ ■■■■■ ■ STM32-启动文件 STM32 启动文件由 ST 官方提供 启动文件由汇编编写,是系统上电复位后第一个…

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

数据可视化入门(二) 本章我们尝试用 matplotlib 来绘制一些高阶统计图表。正如前面所说的,大家可以通过 matplotlib 官方网站上提供的文档和示例来学习如何使用 matplotlib 并绘制出更加高级的统计图表;尤其是在定制一些比较复杂…

旅游管理平台系统

摘要 如今许多地区的风景已经随着网络技术的不断发展和进步而映入人们的眼帘,旅游已经成为一种大众化的休闲方式。而青海海西州风光旖旎,民族文化独特,更是吸引了众多游客纷至沓来。海西州地域广阔、人烟稀少、是一个经济发展缓慢的地方&…

Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS

前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险,包括数据泄露、账号被盗以及恶意软件的安装。因此,利用合适的Wi-Fi安全措施是非常重要的,了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…

Python的三种方式显示图片

from PIL import Image import numpy as np im Image.open("img.png") #方法一:使用PIL库显示图片 a np.array(im) imImage.fromarray(a) im.show() import matplotlib.pyplot as plt #方法二:使用matplotlib库显示图片 plt.imshow(a) plt.s…

AI在创造还是毁掉音乐

目录 1.概述 2.整体介绍 3.人机合作 3.1. AI作为助手 3.2. AI作为创意源泉 3.3. 交互式合作 3.4. AI独立创作与音乐人后期制作 3.5.试点和挑战 4.伦理道德 4.1.AI替代人类的可能性 4.2.伦理道德问题 4.3.平衡技术与创造力 4.4.小结 1.概述 近期音乐大模型的兴起&…

OceanBase 并行执行参数 parallel_servers_target 理解

为了最大程度降低 PX 使用难度,OceanBase 3.1 版起,parallel_max_servers 参数废弃。 用户只需用好 parallel_servers_target 即可。 target 的用途 用一个酒吧的例子来粗略理解下 parallel_servers_target 的意思: target 先生开了一个酒…

Qt画五角星,简单图表

五角星&#xff1a; 代码&#xff1a; widget.cpp #include "widget.h" #include "ui_widget.h" #include <QPaintEvent> #include <QPainter> #include <QPainterPath> Widget::Widget(QWidget *parent): QWidget(parent), ui(new U…