API (v2) 関連オブジェクト検索
| コマンド | 対応状況 | 備考 |
|---|---|---|
| FIND | ✅ | 任意の key/value 引数 |
| FINDX | ✅ | ソートと正規表現に対応した拡張 FIND |
| GETOBJECT | ✅ | ソートと正規表現対応の FIND + GET 一体型 |
| GETALL | ✅ | ソートと正規表現に対応したオブジェクトと NameSpace の一括取得 |
Find:
Find リクエストは、成功すると検索条件に一致する CODB オブジェクトの Object ID (OID) を返します。
ローカルリクエスト:
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "FIND Vsite name = \"site1\"",
"oid": "",
"user": "admin",
"sessionid": "tK46aZ885HA1QxEiti1dlq.....VpQM3cfavn1yxfF8vFEBeoH3"
}
' \
| jq
リモートリクエスト:
curl -k -s \
-X POST https://API-IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "FIND Vsite name = \"site1\"",
"token": "TOKEN"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"oidlist": [
"34"
]
}
}
レスポンス(失敗):
{
"status": 201,
"message": "GOODBYE"
}
FINDX:
FINDX は、指定した条件に基づいて特定クラスのオブジェクトを検索するための機能です。通常は API 連携で、あるクラス内のオブジェクトをフィルタ、ソート、追加条件付きで検索する際に使用します。以下にローカルアクセス(同一システム内からの呼び出し)とリモートアクセス(外部 API エンドポイント経由)の 2 例を示します。
Payload:
- cmd: 実行するコマンド(FINDX)
- user: リクエストを発行するユーザー名
- sessionid(ローカルアクセス時): 認証用の有効なセッション ID
- token(リモートアクセス時): 認証用の有効なトークン
- class: 検索対象オブジェクトのクラス(UserClass)
- args: クラスに対する通常フィルタ(例: status = active)
- regex_args: 正規表現による追加フィルタ(例: username が 'admin' で始まる)
- sorttype: ソート順(asc は昇順)
- sortprop: ソート対象プロパティ(この例では name)
ローカルリクエスト:
curl -sk \
-X POST https://127.0.0.1:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "FINDX",
"user": "admin",
"sessionid": "SESSION-ID",
"class": "UserClass",
"args": {
"status": "active"
},
"regex_args": {
"username": "/^admin/"
},
"sorttype": "asc",
"sortprop": "name"
}
' \
| jq
リモートリクエスト:
curl -sk \
-X POST https://API-IP:9092/api/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "FINDX",
"user": "admin",
"sessionid": "SESSION-ID",
"class": "UserClass",
"args": {
"status": "active"
},
"regex_args": {
"username": "/^admin/"
},
"sorttype": "asc",
"sortprop": "name",
"token": "TOKEN"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "GOODBYE",
"data": {
"oidlist": [
"34"
]
}
}
レスポンス(失敗):
{
"status": 201,
"message": "OK",
"data": {
"oidlist": []
}
}
GETOBJECT:
GETOBJECT は FIND と GET を組み合わせたコマンドで、検索条件に一致する単一オブジェクトを返します。
ローカルリクエスト:
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "GETOBJECT",
"class": "Vsite",
"args": {
"name": "site1"
},
"namespace": "",
"user": "admin",
"sessionid": "SESSION-ID"
}
' \
| jq
リモートリクエスト:
curl -k -s \
-X POST https://API-IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "GETOBJECT",
"class": "Vsite",
"args": {
"name": "site1"
},
"namespace": "",
"token": "TOKEN"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "OK",
"data": {
"DATA": {
"basedir": "/home/.sites/site1",
"class": "Vsite",
"classver": "1.0",
"createduser": "admin",
"dns_auto": "1",
"domain": "smd.net",
"emaildisabled": "0",
"force_update": "1747164973",
"fqdn": "t1.smd.net",
"hostname": "t1",
"ipaddr": "208.77.151.218",
"ipaddripv6": "",
"mailaliases": "",
"mailcatchall": "",
"maxusers": "25",
"name": "site1",
"namespace": "",
"oid": "34",
"prefix": "",
"site_preview": "0",
"siteadmincaps": "",
"suspend": "0",
"userprefixenabled": "0",
"userprefixfield": "",
"userwebsdisabled": "0",
"volume": "/home",
"webaliases": "",
"webaliasredirects": "1"
}
}
}
レスポンス(失敗):
{
"status": 404,
"message": "Object not found"
}
GETALL:
GETALL は FIND と GET を組み合わせたコマンドで、検索条件に一致する 1 個以上のオブジェクトと、そのすべての NameSpace を返します。OID を既に知っている場合は OID 指定で、そうでなければ引数指定で検索できます。
ローカルリクエスト:
curl -k -s \
-X POST https://127.0.0.1:9092/v2/cce \
-d '
{
"cmd": "GETALL",
"oids": [
"56",
"58"
],
"args": {
"name": "site1"
},
"user": "admin",
"sessionid": "SESSION-ID"
}
' \
| jq
リモートリクエスト:
curl -k -s \
-X POST https://API-IP:9092/v2/cce \
-H "Content-Type: application/json" \
-H "X-Client-Secret: CLIENT-SECRET" \
-d '
{
"cmd": "GETALL",
"oids": [
"56",
"58"
],
"args": {
"name": "site1"
},
"token": "TOKEN"
}
' \
| jq
レスポンス(成功):
{
"status": 201,
"message": "OK",
"data": {
"objects": {
"56": { // <--- 最初の OID とすべての NameSpace
"Disk": {
[...]
},
"Email": {
[...]
},
"ImapSync": {
[...]
},
"OBJECT": {
[...]
},
"Radicale": {
[...]
},
"RootAccess": {
[...]
},
"SSH": {
[...]
},
"Shell": {
[...]
},
"Sites": {
[...]
},
[...]
},
"58": { // <--- 2 番目の OID とすべての NameSpace
"Disk": {
[...]
},
"Email": {
[...]
},
[...]
"OBJECT": {
[...]
},
"Radicale": {
[...]
},
"RootAccess": {
[...]
},
"SSH": {
[...]
},
"Shell": {
[...]
},
"Sites": {
[...]
},
"subdomains": {
[...]
}
}
}
}
}
レスポンス(失敗):
{
"status": 201,
"message": "GOODBYE",
"data": {
"errors": [
{
"code": 401,
"message": "FAIL"
}
],
"oid": "-1"
}
}