bheisig/idoitapi

此软件包已被弃用,不再维护。作者建议使用idoit/apiclient软件包。

适用于i-doit的JSON-RPC API的简单易用且功能丰富的客户端库

0.10 2020-04-07 12:03 UTC

This package is auto-updated.

Last update: 2022-07-13 07:50:11 UTC


README

适用于i-doit的JSON-RPC API的简单易用且功能丰富的客户端库

Latest stable version Minimum PHP version Build status

请注意:此项目不是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的基本URL
  • API::PORT:Web服务器监听的可选端口号;如果没有设置,则HTTP使用80端口,HTTPS使用443端口
  • API::KEY:API密钥
  • API::USERNAMEAPI::PASSWORD:如果需要,可选凭证,否则将使用System API用户
  • API::LANGUAGE:i-doit的请求和响应将转换为该语言(支持deen);这是可选的;默认为用户的首选语言
  • 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_USERNAMEAPI::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客户端库的项目

发送拉取请求以添加您的项目。

版权 & 许可

版权(C)2022 synetics GmbH

版权(C)2016-2022 Benjamin Heisig

根据GNU Affero GPL版本3或更高版本(AGPLv3+)许可。这是免费软件:您可以自由更改和重新分发它。在法律允许的范围内,没有任何保证。