bheisig / idoitapi
Requires
- php: >=7.1.0
- ext-curl: *
- ext-date: *
- ext-json: *
- ext-openssl: *
- ext-spl: *
- ext-zlib: *
Requires (Dev)
- php: >=7.2.0
- brianium/paratest: ^4
- dealerdirect/phpcodesniffer-composer-installer: ^0.6.0
- j13k/yaml-lint: ^1.1
- phan/phan: ^2.4.6
- php-parallel-lint/php-parallel-lint: ^1.0
- phpcompatibility/php-compatibility: ^9.3.5
- phploc/phploc: ^6 || ^5
- phpmd/phpmd: ^2.8.2
- phpstan/phpstan: ^0.12.7
- phpunit/phpunit: ^9 || ^8
- povils/phpmnd: ^2
- roave/security-advisories: dev-master
- sclable/xml-lint: ^0.2.4
- sebastian/phpcpd: ^5 || ^4
- seld/jsonlint: ^1.7
- sensiolabs/security-checker: ^6.0.3
- sllh/composer-lint: ^1.0
- squizlabs/php_codesniffer: ^3.5.4
- symfony/dotenv: ^5.0.3
Suggests
- ext-xdebug: Needed for code coverage with phpunit
README
适用于i-doit的JSON-RPC API的简单易用且功能丰富的客户端库
请注意:此项目不是synetics GmbH的官方产品。synetics GmbH不提供任何商业支持。
关于
i-doit是一款用于IT文档和CMDB(配置管理数据库)的软件应用。此应用非常适合收集您关于所处理的IT基础设施的所有知识。i-doit是一个Web应用,具有详尽的API,这对于自动化您的基础设施非常有用。
此API客户端库提供了一个简单但强大的抽象层,用于向i-doit的API发送请求。它使用纯PHP编写。
功能
您为什么要使用此API客户端库?有以下一些很好的理由
- 易于使用
- 每个API方法都有一个PHP函数
- 支持批量请求(更快)
- 发送用户定义的请求
- 上传文件和图像
- 支持登录和登出方法以保存会话
- 自动跟随重定向(HTTP 301/302)
- 使用可选的HTTP或SOCKS5代理
- 验证TLS证书链
- 错误时抛出异常
- 许多示例
- 文档齐全
- 通过Composer轻松安装
- 经过大量集成测试
有什么新功能?请查看变更日志。
要求
在使用客户端之前满足这些简单要求
- 运行中的i-doit pro/open实例,版本1.18.1或更高(较旧版本可能工作但不受支持)
- i-doit API附加组件,版本1.12.3或更高(较旧版本可能工作但不受支持)
- PHP,版本8.0或更高(推荐使用8.1,7.4应该工作但已弃用)
- PHP模块curl、date、json、openssl和zlib
一般来说,始终使用最新稳定版本以从新功能、改进和错误修复中受益。
安装
建议通过Composer安装此客户端。更改到您的项目根目录并获取最新稳定版本
composer require idoit/apiclient
除了坚持特定/最低版本外,您还可以通过使用@DEV
切换到当前开发分支
composer require "idoit/apiclient=@DEV"
更新
Composer有一个很大的优点(除了其他优点之外),您可以简单地通过运行以下命令来更新API客户端库
composer update
用法
如果您使用Composer,也应使用其自己的自动加载器
require_once 'vendor/autoload.php';
就这样。所有其他文件将在需要时自动加载。
配置
API客户端库类需要一个配置
use Idoit\APIClient\API;
$api = new API([
API::URL => 'https://demo.i-doit.com/src/jsonrpc.php',
API::PORT => 443,
API::KEY => 'c1ia5q',
API::USERNAME => 'admin',
API::PASSWORD => 'admin',
API::LANGUAGE => 'en',
API::PROXY => [
API::PROXY_ACTIVE => false,
API::PROXY_TYPE => 'HTTP', // 'HTTP' or 'SOCKS5'
API::PROXY_HOST => 'proxy.example.net',
API::PROXY_PORT => 8080,
API::PROXY_USERNAME => '',
API::PROXY_PASSWORD => ''
],
API::BYPASS_SECURE_CONNECTION => false
]);
API::URL
:i-doit的API URL,可能是附加了src/jsonrpc.php
的基本URLAPI::PORT
:Web服务器监听的可选端口号;如果没有设置,则HTTP使用80端口,HTTPS使用443端口API::KEY
:API密钥API::USERNAME
和API::PASSWORD
:如果需要,可选凭证,否则将使用System API
用户API::LANGUAGE
:i-doit的请求和响应将转换为该语言(支持de
和en
);这是可选的;默认为用户的首选语言API::PROXY
:在客户端和服务器之间使用代理API::PROXY_ACTIVE
:如果true
,则将使用代理设置API::PROXY_TYPE
:使用HTTP(API::PROXY_TYPE_HTTP
)或SOCKS5(API::PROXY_TYPE_SOCKS5
)代理API::PROXY_HOST
:代理的FQDN或IP地址API::PROXY_PORT
:代理服务器监听的端口API::PROXY_USERNAME
和API::PROXY_PASSWORD
:用于验证代理的可选凭证
API::BYPASS_SECURE_CONNECTION
:设置为true
以禁用安全相关的cURL选项;默认为false
;不要在生产环境中设置此选项!
示例
一个基本的“Hello, World!”示例是获取有关您的i-doit实例的一些基本信息
use Idoit\APIClient\API;
use Idoit\APIClient\Idoit;
require_once 'vendor/autoload.php';
$api = new API([
API::URL => 'https://demo.i-doit.com/src/jsonrpc.php',
API::KEY => 'c1ia5q',
API::USERNAME => 'admin',
API::PASSWORD => 'admin'
]);
$request = new Idoit($api);
$info = $request->readVersion();
var_dump($info);
就是这样简单。更多示例请查看下一部分。
登录和登出
关于i-doit的API,有一件好事是您可以(并且应该)为您的工作使用一个用户会话。这可以在服务器端节省资源,并允许您在短时间内执行更多调用。
会话处理由API客户端库完成。您只需登录即可。并且如果您是好人,您会在工作完成后登出。
use Idoit\APIClient\API;
$api = new API([/* … */]);
$api->login();
// Do your stuff…
$api->logout();
如果您不确定您的会话处于什么状态,请尝试isLoggedIn()
$api->isLoggedIn(); // Returns true or false
预定义方法
几乎每种情况都有一个远程过程,您可以通过API调用它来读取或操作i-doit的数据库。每个远程过程都分配到一个命名空间,以保持API的整洁和流畅。幸运的是,您不需要自己调用这些远程过程。API客户端库为每个命名空间提供了一个类,并为每个远程过程提供了一个方法。以下是一个快速概述
命名空间 | 远程过程调用(RPC) | API客户端库中的类 | 方法 |
---|---|---|---|
idoit |
idoit.addons |
Idoit |
getAddOns() |
idoit.constants |
readConstants() |
||
idoit.license |
getLicense() |
||
idoit.search |
search() |
||
idoit.version |
readVersion() |
||
idoit.login |
API |
login() |
|
idoit.logout |
logout() |
||
cmdb.object |
cmdb.object.create |
CMDBObject |
create() |
cmdb.object.read |
read() |
||
cmdb.object.update |
update() |
||
cmdb.object.archive |
archive() |
||
cmdb.object.delete |
delete() |
||
cmdb.object.purge |
purge() |
||
cmdb.objects |
cmdb.objects.read |
CMDBObjects |
read() |
cmdb.category |
cmdb.category.create |
CMDBCategory |
create() |
cmdb.category.read |
read() , readOneByID() , readFirst() |
||
cmdb.category.update |
update() |
||
cmdb.category.save |
save() |
||
cmdb.category.archive |
archive() |
||
cmdb.category.delete |
delete() |
||
cmdb.category.purge |
purge() |
||
cmdb.category_info |
cmdb.category_info.read |
CMDBCategoryInfo |
read() |
cmdb.dialog |
cmdb.dialog.create |
CMDBDialog |
create() |
cmdb.dialog.read |
read() |
||
cmdb.dialog.delete |
delete() |
||
cmdb.impact |
cmdb.impact.read |
CMDBImpact |
readByID() , readByConst() |
cmdb.location_tree |
cmdb.location_tree.read |
CMDBLocationTree |
read() , readRecursively() |
cmdb.logbook |
cmdb.logbook.create |
CMDBLogbook |
create() |
cmdb.logbook.read |
read() |
||
cmdb.objects_by_relation |
cmdb.objects_by_relation.read |
CMDBObjectsByRelation |
readByID() , readByConst() |
cmdb.object_type_categories |
cmdb.object_type_categories.read |
CMDBObjectTypeCategories |
readByID() , readByConst() |
cmdb.object_type_groups |
cmdb.object_type_groups.read |
CMDBObjectTypeGroups |
read() |
cmdb.object_types |
cmdb.object_types.read |
CMDBObjectTypes |
read() , readOne() , readByTitle() |
cmdb.reports |
cmdb.reports.read |
CMDBReports |
read() , listReports() |
cmdb.workstation_components |
cmdb.workstation_components.read |
CMDBWorkstationComponents |
read() , readByEMail() , readByEMails() |
checkmk.statictag |
checkmk.statictag.create |
CheckMKStaticTag |
create() |
checkmk.statictag.read |
read() , readByID() , readByIDs() , readByTag() |
||
checkmk.statictag.update |
update() |
||
checkmk.statictag.delete |
delete() |
||
checkmk.tags |
checkmk.tags.read |
CheckMKTags |
read() |
monitoring.livestatus |
monitoring.livestatus.create |
MonitoringLivestatus |
createTCPConnection , createUNIXSocketConnection |
monitoring.livestatus.read |
read() , readByID() , readByIDs() , readByTitle() |
||
monitoring.livestatus.update |
update() |
||
monitoring.livestatus.delete |
deleteByID() , deleteByTitle() |
此外,此API客户端库还附带了一些方法作为远程过程调用缺失时的解决方案。RPC cmdb.objects.create
不存在,但您可以使用CMDBObjects::create()
。它模拟缺失的RPC,并提供了一种更简单、更快速的方式来操作您的CMDB。
如果合理,大多数RPC都有执行批量请求的方法。例如,CMDBCategory::batchRead()
可以一次性检索多个分类条目。
示例
在i-doit数据库中搜索
use Idoit\APIClient\API;
use Idoit\APIClient\Idoit;
$api = new API([/* … */]);
$idoit = new Idoit($api);
$result = $idoit->search('Server XY');
var_dump($result);
同时执行多个搜索
use Idoit\APIClient\API;
use Idoit\APIClient\Idoit;
$api = new API([/* … */]);
$idoit = new Idoit($api);
$result = $idoit->batchSearch([
'Server XY',
'Client A',
'John Doe'
]);
var_dump($result);
创建新对象
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObject;
$api = new API([/* … */]);
$object = new CMDBObject($api);
$objectID = $object->create(
'C__OBJTYPE__SERVER',
'Server XY'
);
var_dump($objectID);
读取对象的通用信息
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObject;
$api = new API([/* … */]);
$object = new CMDBObject($api);
$objectInfo = $object->read(42);
var_dump($objectInfo);
加载对象的全部数据
这将检索有关对象的所有信息:通用数据、分配的分类以及分类条目。
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObject;
$api = new API([/* … */]);
$object = new CMDBObject($api);
$objectInfo = $object->load(42);
var_dump($objectInfo);
方法load()
大约会触发4次API调用。因此,如果它被大量使用,请注意。
更新现有对象
目前,您可以更新对象的标题
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObject;
$api = new API([/* … */]);
$object = new CMDBObject($api);
$object->update(
42,
[
'title' => 'A shiny new object title'
]
);
创建或更新对象("upsert")
如果您想要获取对象的标识符,但不确定它是否存在,请尝试upsert。这意味着“更新”和“插入”同时进行。这意味着,如果对象存在,您将直接获取其标识符。如果不存在,则创建对象,然后您将获取其标识符。对象必须与类型和标题匹配。其他属性将被存储。
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObject;
$api = new API([/* … */]);
$object = new CMDBObject($api);
$object->upsert(
'C__OBJTYPE__SERVER',
'My little server',
[
'purpose' => 'Private stuff'
]
);
获取对象标识符
通过对象标题和(可选)类型获取对象标识符
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjects;
$api = new API([/* … */]);
$object = new CMDBObjects($api);
$objectID = $object->getID('My little server');
$objectID = $object->getID('My little server', 'C__OBJTYPE__SERVER');
如果没有对象或存在多个对象,将抛出异常错误。
更改对象的文档状态
i-doit 具有存档 IT 文档的概念。每个对象都有一个状态(正常
,存档
,标记为 已删除
)。最后但并非最不重要的是,对象可能会从数据库中删除。
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObject;
$api = new API([/* … */]);
$object = new CMDBObject($api);
$objectID = 42;
// Archive:
$object->archive($objectID);
// Mark as deleted:
$object->delete($objectID);
// Purge from database:
$object->purge($objectID);
创建多个对象
一次创建多个对象
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjects;
$api = new API([/* … */]);
$cmdbObjects = new CMDBObjects($api);
$objectIDs = $cmdbObjects->create(
[
['type' => 'C__OBJTYPE__SERVER', 'title' => 'Server No. One'],
['type' => 'C__OBJTYPE__SERVER', 'title' => 'Server No. Two'],
['type' => 'C__OBJTYPE__SERVER', 'title' => 'Server No. Three']
]
);
var_dump($objectIDs);
读取多个对象
一次性读取多个对象提供了几种方法。让我们看看
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjects;
$api = new API([/* … */]);
$cmdbObjects = new CMDBObjects($api);
// Fetch every object:
$objects = $cmdbObjects->read();
var_dump($objects);
// Fetch max. 10 servers and sort them descending by title:
$objects = $cmdbObjects->read(['type' => 'C__OBJTYPE__SERVER'], 10, 0, 'title', CMDBObjects::SORT_DESCENDING);
var_dump($objects);
// Get them by their identifiers:
$objects = $cmdbObjects->readByIDs([1, 2, 3]);
var_dump($objects);
// Get all servers:
$objects = $cmdbObjects->readByType('C__OBJTYPE__SERVER');
var_dump($objects);
// Get archived clients:
$objects = $cmdbObjects->readArchived('C__OBJTYPE__CLIENT');
var_dump($objects);
// Get clients marked as deleted:
$objects = $cmdbObjects->readDeleted('C__OBJTYPE__CLIENT');
var_dump($objects);
更新多个对象
一次性更新多个对象
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjects;
$api = new API([/* … */]);
$cmdbObjects = new CMDBObjects($api);
// Rename objects 1, 2, 3:
$cmdbObjects->update([
['id' => 1, 'title' => 'New name'],
['id' => 2, 'title' => 'Another name'],
['id' => 3, 'title' => 'Just a name'],
]);
存档/删除/清理多个对象
存档对象,将其标记为已删除,甚至将其从数据库中删除
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjects;
$api = new API([/* … */]);
$cmdbObjects = new CMDBObjects($api);
$cmdbObjects
->archive([1, 2, 3])
->delete([1, 2, 3])
->purge([1, 2, 3]);
使用属性创建分类条目
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
$entryID = $this->category->save(
42,
'C__CATG__IP',
[
'net' => 123,
'active' => 1,
'primary' => 0,
'net_type' => 1,
'ipv4_assignment' => 2,
'ipv4_address' => '10.20.10.100',
'description' => 'API TEST'
]
);
var_dump($entryID);
或者,使用方法 CMDBCategory::batchCreate()
进行批量请求。
读取分类和属性
读取一个或多个特定对象的分类条目
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
$result = $category->read(42, 'C__CATG__IP');
var_dump($result);
读取一个特定对象的特定分类条目
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
$result = $category->readOneByID(42, 'C__CATG__IP', 23);
var_dump($result);
只读取一个分类条目(在单值分类中使用时比 read()
更简单)
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
$result = $category->readFirst(42, 'C__CATG__IP');
var_dump($result);
一次性读取多个对象和分类的数据
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
$result = $category->batchRead(
[23, 42],
['C__CATG__IP', 'C__CATG__MODEL']
);
var_dump($result);
更新分类和属性
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
$category->save(
42,
'C__CATG__GLOBAL',
[
'cmdb_status' => 10
]
);
或者,使用方法 CMDBCategory::batchUpdate()
进行批量请求。
更改分类及其属性的文档状态
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBCategory;
$api = new API([/* … */]);
$category = new CMDBCategory($api);
// Archive:
$category->archive(42, 'C__CATG__CPU', 1);
// Mark as deleted:
$category->delete(42, 'C__CATG__CPU', 2);
// Purge from database:
$category->purge(42, 'C__CATG__CPU', 3);
在下拉菜单中创建值
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBDialog;
$api = new API([/* … */]);
$dialog = new CMDBDialog($api);
$entryID = $dialog->create('C__CATG__MODEL', 'title', 'My model');
var_dump($entryID);
$entryIDs = $dialog->batchCreate([
'C__CATG__MODEL' => [
'manufacturer' => 'My manufacturer',
'title' => 'My model'
],
'C__CATG__GLOBAL' => [
'category' => [
'cat 1',
'cat 2',
'cat 3'
],
'purpose' => 'API TEST'
]
]);
var_dump($entryIDs);
从下拉菜单中获取值
i-doit 中的下拉菜单称为 "对话框"(只读)或 "对话框+"(可编辑)。
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBDialog;
$api = new API([/* … */]);
$dialog = new CMDBDialog($api);
$models = $dialog->read('C__CATG__MODEL', 'title');
var_dump($models);
$modelsAndManufacturers = $dialog->batchRead([
'C__CATG__MODEL' => [
'manufacturer',
'title'
]
]);
var_dump($modelsAndManufacturers);
构建位置树
读取位于对象直接下方的对象
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBLocationTree;
$api = new API([/* … */]);
$locationTree = new CMDBLocationTree($api);
$result = $locationTree->read(1);
var_dump($result);
递归读取位于对象下方的对象
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBLocationTree;
$api = new API([/* … */]);
$locationTree = new CMDBLocationTree($api);
$result = $locationTree->readRecursively(1);
var_dump($result);
获取对象之间的关系
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjectsByRelation;
$api = new API([/* … */]);
$relation = new CMDBObjectsByRelation($api);
$result = $relation->read(
10,
'C__RELATION_TYPE__PERSON_ASSIGNED_GROUPS'
);
var_dump($result);
获取某人的工作场所组件
一个人可能被分配到具有几个组件的工作场所,如 PC、显示器和电话。这些组件可以通过人员获取。您可能需要对象 ID 或电子邮件地址。甚至支持多个工作场所。
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBWorkstationComponents;
$api = new API([/* … */]);
$components = new CMDBWorkstationComponents($api);
$result = $components->read(111); // Person object with ID 111
var_dump($result);
$result = $components->batchRead([111, 222]); // Person objects with IDs 111 and 222
var_dump($result);
$result = $components->readByEMail('alice@example.org'); // Person object with email address
var_dump($result);
$result = $components->readByEMails(['alice@example.org', 'bob@example.org']); // Person objects with email addresses
var_dump($result);
报告
列出所有报告
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBReports;
$api = new API([/* … */]);
$reports = new CMDBReports($api);
$result = $reports->listReports();
var_dump($result);
获取报告的结果
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBReports;
$api = new API([/* … */]);
$reports = new CMDBReports($api);
$result = $reports->read(1);
var_dump($result);
获取一个或多个报告的结果
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBReports;
$api = new API([/* … */]);
$reports = new CMDBReports($api);
$result = $reports->batchRead([1, 2]);
var_dump($result);
从子网获取下一个可用 IP 地址
use Idoit\APIClient\API;
use Idoit\APIClient\Subnet;
$api = new API([/* … */]);
$subnet = new Subnet($api);
// Load subnet object by its identifier:
$nextIP = $subnet->load(123)->next();
echo 'Next IP address: ' . $nextIP . PHP_EOL;
上传文件
此 API 客户端库能够上传文件,创建一个新的 "文件" 对象并将其分配给通过其 ID 识别的现有对象
use Idoit\APIClient\API;
use Idoit\APIClient\File;
$api = new API([/* … */]);
$file = new File($api);
// Assign one file to object with identifier 100:
$file->add(100, '/path/to/file', 'my file');
// Assign many files to this object:
$file->batchAdd(
100,
[
'file1.txt' => 'File 1',
'file2.txt' => 'File 2',
'file3.txt' => 'File 3'
]
);
将图片上传到相册
每个对象可能都有一个由分配的分类“图片”提供的图片库。这是上传图片文件并将它们分配给现有对象的方法
use Idoit\APIClient\API;
use Idoit\APIClient\Image;
$api = new API([/* … */]);
$image = new Image($api);
// Assign one image with a caption to object's gallery with identifier 100:
$image->add(100, '/path/to/flowers.jpg', 'nice picture of flowers');
// Assign many images to this object:
$file->batchAdd(
100,
[
'file1.jpg' => 'JPEG file',
'file2.png' => 'PNG file',
'file3.bmp' => 'BMP file',
'file3.gif' => 'Animated GIF file'
]
);
自定义请求
有时自己定义请求比使用此API客户端库提供的预定义方法更好。以下是执行自定义请求的方法
use Idoit\APIClient\API;
$api = new API([/* … */]);
$result = $api->request('idoit.version');
var_dump($result);
request()
接受方法和可选参数。
自定义批量请求
与简单请求类似,您可以执行批量请求,其中包含所需的大量子请求
use Idoit\APIClient\API;
$api = new API([/* … */]);
$result = $api->batchRequest([
[
'method' => 'idoit.version'
],
[
'method' => 'cmdb.object.read',
'params' => ['id' => 1]
]
]);
var_dump($result);
读取有关您的CMDB设计的信息
获取有关对象类型、组中对象类型、分配给对象类型的分类以及分类中可用的属性的信息
use Idoit\APIClient\API;
use Idoit\APIClient\CMDBObjectTypes;
use Idoit\APIClient\CMDBObjectTypeGroups;
use Idoit\APIClient\CMDBObjectTypeCategories;
use Idoit\APIClient\CMDBCategoryInfo;
$api = new API([/* … */]);
// Object types:
$objectTypes = new CMDBObjectTypes($api);
$allObjectTypes = $objectTypes->read();
var_dump($allObjectTypes);
$server = $objectTypes->readOne('C__OBJTYPE__SERVER');
var_dump($server);
$someObjectTypes = $objectTypes->batchRead('C__OBJTYPE__SERVER', 'C__OBJTYPE__CLIENT');
var_dump($someObjectTypes);
$client = $objectTypes->readByTitle('LC__CMDB__OBJTYPE__CLIENT');
var_dump($client);
// Object types per group:
$objectTypesPerGroup = new CMDBObjectTypeGroups($api);
$objectTypes = $objectTypesPerGroup->read();
var_dump($objectTypes);
// Categories assigned to object types:
$assignedCategory = new CMDBObjectTypeCategories($api);
$serverCategories = $assignedCategory->readByConst('C__OBJTYPE__SERVER');
var_dump($serverCategories);
// Read by identifiers is also possible. And there are methods for batch requests.
// Attributes available in categories:
$categoryInfo = new CMDBCategoryInfo($api);
$modelCategory = $categoryInfo->read('C__CATG__MODEL');
var_dump($modelCategory);
$categories = $categoryInfo->batchRead([
'C__CATG__MODEL',
'C__CATG__FORMFACTOR',
'C__CATS__PERSON_MASTER'
]);
var_dump($categories);
读取有关i-doit本身的信息
use Idoit\APIClient\API;
use Idoit\APIClient\Idoit;
$api = new API([/* … */]);
$idoit = new Idoit($api);
$version = $idoit->readVersion();
$constants = $idoit->readConstants();
$addOns = $idoit->getAddOns();
$license = $idoit->getLicense();
var_dump($version, $constants, $addOns, $license);
重新连接到服务器
有时您需要一个全新的连接。您可以明确地从i-doit服务器断开连接并重新连接到它
use Idoit\APIClient\API;
$api = new API([/* … */]);
// Do your stuff…
$api->disconnect();
$api->isConnected(); // Returns false
$api->connect();
$api->isConnected(); // Returns true
调试API调用
为了调试目的,获取一些有关您的API调用的详细信息是非常有用的。此脚本使用一些有用的方法
#!/usr/bin/env php
<?php
use Idoit\APIClient\API;
use Idoit\APIClient\Idoit;
$start = time();
require_once 'vendor/autoload.php';
$api = new API([/* … */]);
// @todo Insert your code here, for example:
$request = new Idoit($api);
$request->readVersion();
fwrite(STDERR, 'Last request:' . PHP_EOL);
fwrite(STDERR, '=============' . PHP_EOL);
fwrite(STDERR, $api->getLastRequestHeaders() . PHP_EOL);
fwrite(STDERR, json_encode($api->getLastRequestContent(), JSON_PRETTY_PRINT) . PHP_EOL);
fwrite(STDERR, PHP_EOL);
fwrite(STDERR, '--------------------------------------------------------------------------------' . PHP_EOL);
fwrite(STDERR, 'Last response:' . PHP_EOL);
fwrite(STDERR, '==============' . PHP_EOL);
fwrite(STDERR, $api->getLastResponseHeaders() . PHP_EOL);
fwrite(STDERR, json_encode($api->getLastResponse(), JSON_PRETTY_PRINT) . PHP_EOL);
fwrite(STDERR, PHP_EOL);
fwrite(STDERR, '--------------------------------------------------------------------------------' . PHP_EOL);
fwrite(STDERR, 'Last connection:' . PHP_EOL);
fwrite(STDERR, '================' . PHP_EOL);
$info = $api->getLastInfo();
unset($info['request_header']);
foreach ($info as $key => $value) {
if (is_array($value)) {
$value = '…';
}
fwrite(STDERR, $key . ': ' . $value . PHP_EOL);
}
fwrite(STDERR, '--------------------------------------------------------------------------------' . PHP_EOL);
fwrite(STDERR, 'Amount of requests: ' . $api->countRequests() . PHP_EOL);
$memoryUsage = memory_get_peak_usage(true);
fwrite(STDERR, sprintf('Memory usage: %s bytes', $memoryUsage) . PHP_EOL);
$duration = time() - $start;
fwrite(STDERR, sprintf('Duration: %s seconds', $duration) . PHP_EOL);
贡献
请向我们的问题跟踪器报告任何问题。拉取请求非常受欢迎。如果您想参与其中,请查看文件CONTRIBUTING.md
以获取详细信息。
使用此API客户端库的项目
- i-doit CLI工具 – "在命令行界面访问您的CMDB"
- i-doit Check_MK 2插件 – "在i-doit和Check_MK之间共享信息"
发送拉取请求以添加您的项目。
版权 & 许可
版权(C)2022 synetics GmbH
版权(C)2016-2022 Benjamin Heisig
根据GNU Affero GPL版本3或更高版本(AGPLv3+)许可。这是免费软件:您可以自由更改和重新分发它。在法律允许的范围内,没有任何保证。