PHP API客户端库

v1.1 2023-01-27 10:22 UTC

This package is auto-updated.

Last update: 2024-09-05 10:04:38 UTC


README

papi是一个用于以面向对象风格操作API的客户端库
安装: composer require noc-vissor/papi
请求
授权
API
缓存

请求对象

创建请求对象
<?php
use NocVissor\Papi\Request;
$request = new Request([
    "headers" => [
       "token" => "..."
     ],
    "post" => [
       "data" => "somedata"
     ],
    "get" => [
       "page" => "2"
     ],
]);

请求构造函数接受一个关联数组,包含子数组:headers、post、get(这些子数组中任何一个都可以不传递,那么将为其设置一个空数组)

<?php
use NocVissor\Papi\Request;
$request = new Request([
    "headers" => [
       "token" => "..."
     ],
    "post" => [
       "data" => "somedata"
     ]
]);

请求对象有get、post、headers属性,它们可以在初始化后更改

<?php
use NocVissor\Papi\Request;
$request = new Request();
$request->post['data'] = 'somebody';

请求方法

merge

静态函数,接受不限数量的请求对象,并将它们的属性合并,如果多个对象具有相同的属性,则接受先传递的对象的属性
<?php
use NocVissor\Papi\Request;
  $request1 = new Request([
      'post' => [
          'par1' => 'val1',
          'par2' => 'val2'
      ]
  ]);
  $request2 = new Request([
      'post' => [
          'par2' => 'newVal2',
          'par3' => 'val3'
      ]
  ]);
  // request2 passed by first parametr, so request2 has hightly priotity than request1
  $new_request = Request::merge($request2, $request1);
  print_r($new_request);

  // [post] => Array
  // (
  //     [par2] => newVal2
  //     [par3] => val3
  //     [par1] => val1
  // )

授权

授权是抽象类,使用现成的类,或创建一个新的类,该类继承自Auth类(请参阅examples/telegram.php中的示例)

方法

link

接受Api对象,并在调用Api对象的auth方法时由Api对象调用,Api对象将自身传递给Auth,以便Auth使用Api对象
<?php
use NocVissor\Papi\Request;
use NocVissor\Papi\Auth\Auth;
use NocVissor\Papi\Api;

class TokenAuth extends Auth{
  private $token;
  function __construct($token)
  {
    parent::__construct();
    $this->token = $token;
    $this->request = new Request([
        'headers' => [
            'token' => $token
        ]
    ]);
  }
  protected function link(Api $api){
    parent::link($api);
    $api->base_url = "https://site.com/api/$this->token"
  }  
}

$api = new Api();
$token = 'token';
$auth = new TokenAuth($token);
$api->auth($auth);

API

Api是通用对象,通过它调用API查询。Api构造函数接受base_url参数
<?php
use NocVissor\Papi\Request;
use NocVissor\Papi\Auth\BearerAuth;
use NocVissor\Papi\Api;

$api = new Api('https://example.com/api');
// create bearer token auth
$auth = new BearerAuth('token');
// link auth object to api object
$api->auth($auth);

// set base request
$api->setBase(new Request(['get'=>[
  'a' => 'b'
]]));

  // merge base request (original base request has priotity on passed request)
$api->mergeBase(new Request(['get'=>[
  'a' => 'c',
  '222' => 'ttt'
]]));
// result $api->based_request->get['a']    -   b



// put, post, get, patch, delete methods accept url relative base_url and request object
$api->put('/items/add', new Request([
  'post' => [
    'name' => 'test_name'
  ]
]));

Api还提供方法进行详细查询
接受数据数组,items
url、method、is_absolute、ch、request
必需:url、method

<?php
use NocVissor\Papi\Request;
use NocVissor\Papi\Api;
$api = new Api('https://example.com/api');

$custom_ch = curl_init();
curl_setopt($custom_ch, CURLOPT_EXPECT_100_TIMEOUT_MS, 100000);
$api->query([
  'url' => 'https://example.com/api2/items/add', // required
  'method' => 'put', // required, valid values: put, post, patch, get, delete 
  'is_absolute' => true, // bool
  'request' => new Request([  // request object
    'post' => [
      'name' => 'test_name'
      ]
  ]),
  'ch' => $custom_ch
]);

缓存

Api对象默认路径:'./cache'
<?php
use NocVissor\Papi\Api;
$api = new Api();
$api->cache->setPath('../../path');
$api->cache->put('token.json', json_encode([
  'access' => 'aaa',
  'refresh' => 'bbb'
]));
$file = $api->cache->get('token.json');

可用于授权中保存令牌或其他数据(请参阅Auth/SkorozvonAuth.php)