noc-vissor / papi
PHP API客户端库
v1.1
2023-01-27 10:22 UTC
Requires
- php: >=7.4.0
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)