odoo-rpc-api について
Odoo の JSON-RPC および XML-RPC API を使って外部アプリを連携するスキルです。認証、モデル呼び出し、問題の診断を案内し、Python、JavaScript、curl のコード例を提供します。
主な機能
- 01JSON-RPC と XML-RPC のガイド
- 02認証とモデル呼び出し
- 03Python、JavaScript、curl の例
- 04RPC エラーの診断
- 05連携時のセキュリティ対策
活用シーン
- 01外部アプリと Odoo の接続
- 02データのインポートやエクスポートの自動化
- 03サードパーティー向けミドルウェアの構築
- 04認証または権限エラーの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill odoo-rpc-apiインストール後、Claude Code で/odoo-rpc-apiを入力して読み込まれたか確認します。
詳細
Odoo RPC API
概要
Odoo は JSON-RPC と XML-RPC を介して強力な外部 API を提供しており、外部アプリケーションからレコードの読み取り、作成、更新、削除を行えます。このスキルでは、認証、モデルの呼び出し、堅牢な連携の構築について説明します。
このスキルを使用する場面
- 外部アプリ(Django、Node.js、モバイルアプリなど)を Odoo に接続する場合。
- Odoo からデータをインポート/エクスポートする自動スクリプトを実行する場合。
- Odoo とサードパーティプラットフォームの間にミドルウェア層を構築する場合。
- API の認証エラーや権限エラーをデバッグする場合。
動作の仕組み
- 有効化:
@odoo-rpc-apiに言及し、必要な連携について説明します。 - 生成:Python、JavaScript、または curl 用のコピーしてすぐ使える RPC 呼び出しコードを取得します。
- デバッグ:エラーを貼り付けると、修正した呼び出しと診断結果を取得できます。
例
例 1:認証してレコードを読み取る(Python)
import os
import xmlrpc.client
url = 'https://myodoo.example.com'
db = 'my_database'
username = 'integration-user'
password = os.environ["ODOO_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, {})
if not uid:
raise RuntimeError("Odoo authentication failed")
# 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)
この操作は業務データを変更します。承認済みのテストデータベースと承認済みの連携ユーザーを使用し、例 1 で認証したオブジェクトを再利用してください。
new_partner_id = models.execute_kw(db, uid, password,
'res.partner', 'create',
[{'name': 'Acme Corp', 'email': '[email protected]', 'is_company': True}]
)
print(f"Created partner ID: {new_partner_id}")
例 3:セッションベースの JSON-RPC フラグメント
以下のウェブエンドポイントには、XML-RPC API キーの例とは異なり、別途認証した Odoo セッション Cookie が必要です。ここではセッションを確立していないため、セッションがない状態ではリクエストは失敗します。デプロイ済みの Odoo バージョンに対応する正確な API については、ドキュメントに記載された外部 API を優先してください。
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}
}
}'
# Supply an authorized session through your HTTP client’s protected cookie store.
# Do not paste session cookies or API keys into logs or shared examples.
ベストプラクティス
- ✅ 推奨:パスワードの代わりに API キー(Settings → Technical → API Keys)を使用してください。Odoo 14 以降で利用できます。
- ✅ 推奨:ネットワークの往復回数を減らすため、
search+readではなくsearch_readを使用してください。 - ✅ 推奨:安全な読み取りでは、上限を設けたバックオフで接続エラーに対処してください。create/write のタイムアウト後、処理の成否が不明な場合は、業務レコードの重複を避けるため、再試行する前に安定した外部識別子を使って状態を確認してください。
- ✅ 推奨:認証情報は環境変数またはシークレットマネージャー(AWS Secrets Manager や
.envファイルなど)に保存してください。 - ❌ 非推奨:スクリプトにパスワードや API キーを直接ハードコードしないでください。定期的にローテーションし、環境変数を使用してください。
- ❌ 非推奨:バッチ処理をせずに短い間隔で API を繰り返し呼び出さないでください。一括操作により、サーバーの負荷を大幅に軽減できます。
- ❌ 非推奨:API 連携にマスター管理者パスワードを使用しないでください。必要最小限の権限を付与した専用の連携ユーザーを作成してください。
制限事項
- OAuth2 やセッションログインには対応していません。XML-RPC の例では API キーを使用します。ウェブ JSON-RPC のフラグメントでは、別途確立したセッションが必要です。
- Odoo の XMLRPC レイヤーにはレート制限が組み込まれていないため、クライアント側でスロットリングを実装する必要があります。
- 添付ファイルはモデルのレコードです。認証済みの RPC モデル呼び出しで
ir.attachmentを使用する場合、バイナリフィールドの内容を base64 としてエンコードしてください。JSON-RPC は REST のアップロードエンドポイントではないため、ペイロードの上限とアクセスルールを遵守してください。 - エンドポイントを選択する前に、ホスティング形態、サブスクリプション、対象バージョンでの外部 API のサポートを確認してください。Odoo Online と Odoo.sh は別のサービスです。Odoo の外部 API を参照してください。
コメント
Markdown 対応