ivan-novakov/php-perun-api

一个用于消费Perun REST API的PHP客户端库

0.1.3 2014-04-10 07:41 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:07:55 UTC


README

Dependency Status

这是一个用PHP编写的客户端库,用于消费Perun REST API。

Perun是一个内容管理系统,用于处理用户身份、组、资源和服务。它目前由CESNETCERIT-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实例的urlhttp_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获取用户,我们需要调用usersManagergetUserById方法。任何需要传递的方法参数都应包含在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实体将用数据填充并返回。

许可

链接

作者