ivan-novakov / php-perun-api
一个用于消费Perun REST API的PHP客户端库
Requires
- php: >=5.3.3
- zendframework/zend-console: ~2.3
- zendframework/zend-http: ~2.3
- zendframework/zend-json: ~2.3
- zendframework/zend-stdlib: ~2.3
Requires (Dev)
- phpunit/phpunit: ~4.0
README
这是一个用PHP编写的客户端库,用于消费Perun REST API。
Perun是一个内容管理系统,用于处理用户身份、组、资源和服务。它目前由CESNET、CERIT-SC以及布拉格马萨里克大学的学生共同开发。
简介
该软件是作为CESNET, a. l. e.发起的Shongo项目的一部分开发的。
要求
- PHP >= 5.3.3
- cURL PHP扩展
安装
使用Composer
要通过composer安装库,请将以下要求添加到您的composer.json
文件中
"require": {
"ivan-novakov/php-perun-api": "~0.1"
}
并运行composer install/update
。
不使用composer
只需克隆存储库,并确保您的自动加载器已正确设置,以便在项目的src
目录中搜索InoPerunApi
命名空间。
使用方法
Perun客户端配置由几个基本部分组成。client
部分用于通用配置,例如Perun API实例的url
。http_client
部分配置了来自Zend Framework 2的标准HTTP客户端对象。《认证器》部分配置HTTP请求的客户端认证。
$clientConfig = array( 'client' => array( 'url' => 'https://api.example.org/rest' ), 'http_client' => array( 'adapter' => 'Zend\Http\Client\Adapter\Curl', 'useragent' => 'Perun Client', 'curloptions' => array( CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_CAINFO => '/etc/ssl/certs/ca-bundle.pem' ) ), 'authenticator' => array( 'class' => 'InoPerunApi\Client\Authenticator\ClientCertificate', 'options' => array( 'key_file' => '/tmp/key.pem', 'crt_file' => '/tmp/crt.pem', 'key_pass' => 'secret' ) ) );
一旦我们有了配置,我们就可以初始化客户端
use InoPerunApi\Client\ClientFactory; $clientConfig = array(...); $clientFactory = new ClientFactory(); $client = $clientFactory->createClient($config);
之后,我们可以向远程API发送请求。对于每个Perun实体,都有一个专门的“管理器”对象,可以处理对应实体的特定调用。例如,要按其ID获取用户,我们需要调用usersManager
的getUserById
方法。任何需要传递的方法参数都应包含在sendRequest
调用的第三个参数中
try { $perunResponse = $client->sendRequest('usersManager', 'getUserById', array( 'id' => 1234 )); } catch (\Exception $e) { // handle exception }
如果在连接到远程API或无法正确解析响应时出现问题,将抛出异常。否则,我们仍然需要检查请求是否成功
if ($perunResponse->isError()) { printf("Perun error [%s]: %s (%s)\n", $perunResponse->getErrorId(), $perunResponse->getErrorType(), $perunResponse->getErrorMessage()); }
如果没有错误,我们可以通过Payload
对象访问响应
$payload = $perunResponse->getPayload(); printf("User: %s %s\n", $payload->getParam('firstName'), $payload->getParam('lastName));
高级使用(实验性)
库可以以更直观的方式使用,尝试“隐藏”我们正在调用远程API的事实。库试图“模仿”远程管理器和实体对象
$usersManager = new GenericManager($client); $usersManager->setManagerName('usersManager'); $user = $usersManager->getUserById(array( 'user' => 1234 )); printf("User: %s %s\n", $user->getFirstName(), $user->getLastName());
我们实例化一个“管理器”对象,并将其构造函数中的一个客户端对象实例传递给它。当我们在这个对象上调用方法时,它会被魔法__call()
方法捕获,并构建和发送客户端请求。如果调用成功,则User
实体将用数据填充并返回。