
关于
Odoo 外部 JSON-RPC 和 XML-RPC API 专家。涵盖认证、模型调用、记录 CRUD 和实时数据操作。
name: odoo-rpc-api description: "Odoo 外部 JSON-RPC 和 XML-RPC API 专家。涵盖身份验证、模型调用、记录 CRUD 操作,以及 Python、JavaScript 和 curl 的实际集成示例。" risk: safe source: "self"
Odoo RPC API
概述
Odoo 通过 JSON-RPC 和 XML-RPC 暴露了强大的外部 API,允许任何外部应用程序读取、创建、更新和删除记录。本技能将指导你完成身份验证、调用模型以及构建稳健的集成方案。
何时使用本技能
- 将外部应用(如 Django、Node.js、移动应用)连接到 Odoo。
- 运行自动化脚本从 Odoo 导入/导出数据。
- 在 Odoo 和第三方平台之间构建中间件层。
- 调试 API 身份验证或权限错误。
工作原理
- 激活:提及
@odoo-rpc-api并描述你需要的集成方案。 - 生成:获取可直接复制粘贴的 RPC 调用代码(支持 Python、JavaScript 或 curl)。
- 调试:粘贴错误信息,获取诊断结果和修正后的调用代码。
示例
示例 1:身份验证并读取记录(Python)
import xmlrpc.client
url = 'https://myodoo.example.com'
db = 'my_database'
username = 'admin'
password = 'my_api_key' # Use API keys, not passwords, in production
# Step 1: Authenticate
common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
uid = common.authenticate(db, username, password, {})
print(f"Authenticated as UID: {uid}")
# Step 2: Call models
models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')
# Search confirmed sale orders
orders = models.execute_kw(db, uid, password,
'sale.order', 'search_read',
[[['state', '=', 'sale']]],
{'fields': ['name', 'partner_id', 'amount_total'], 'limit': 10}
)
for order in orders:
print(order)
示例 2:创建记录(Python)
new_partner_id = models.execute_kw(db, uid, password,
'res.partner', 'create',
[{'name': 'Acme Corp', 'email': 'info@acme.com', 'is_company': True}]
)
print(f"Created partner ID: {new_partner_id}")
示例 3:通过 curl 使用 JSON-RPC
curl -X POST https://myodoo.example.com/web/dataset/call_kw \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "call",
"id": 1,
"params": {
"model": "res.partner",
"method": "search_read",
"args": [[["is_company", "=", true]]],
"kwargs": {"fields": ["name", "email"], "limit": 5}
}
}'
# Note: "id" is required by the JSON-RPC 2.0 spec to correlate responses.
# Odoo 16+ also supports the /web/dataset/call_kw endpoint but
# prefer /web/dataset/call_kw for model method calls.
最佳实践
- ✅ 推荐: 使用 API 密钥(设置 → 技术 → API 密钥)代替密码 — Odoo 14+ 可用。
- ✅ 推荐: 使用
search_read代替search+read,减少网络往返次数。 - ✅ 推荐: 始终处理连接错误,并在生产环境中实现指数退避重试逻辑。
- ✅ 推荐: 将凭据存储在环境变量或密钥管理器中(如 AWS Secrets Manager、
.env文件)。 - ❌ 避免: 在脚本中硬编码密码或 API 密钥 — 应定期轮换并使用环境变量。
- ❌ 避免: 在紧密循环中调用 API 而不进行批处理 — 批量操作可显著降低服务器负载。
- ❌ 避免: 使用主管理员密码进行 API 集成 — 应创建具有最小必要权限的专用集成用户。
限制
- 不涵盖 OAuth2 或基于会话 Cookie 的身份验证 — 示例仅使用 API 密钥(令牌)认证。
- 速率限制未内置于 Odoo XMLRPC 层;你必须在客户端实现节流控制。
- XML-RPC 端点(
/xmlrpc/2/)不支持文件上传 — 对于二进制数据,请通过 JSON-RPC 使用基于 REST 的ir.attachment模型。 - Odoo.sh(SaaS)可能会根据套餐限制某些 API 调用;请验证你的订阅是否支持外部 API 访问。
兼容工具
Claude CodeCursor
标签
后端开发
