我必须构建一个PHP类,基本上是一个包装Guzzles php客户端的客户端,以获取数据并将其发送到REST API。该客户将坐在Laravel应用所需的作曲家程序包中
以一种可以测试程序包/客户端的方式实现此目标的最佳方法是什么。
当前,我的实现是在“ call()”类中有一个方法 这将包裹着Guzzles-> request
类似于
public function call(string $method , string $path, array $query = [], array $auth = [])
{
$query = array_merge($query, ['api_key' => $this->apikey]);
$uriPath = $this->buildApiUri($path);
try {
$resp = $this->client->request($method, $uriPath, [
'auth' => $auth,
'query' => $query,
]);
} catch (RequestException $e) {
Log::error('FAIL ' . $uriPath . ' fetch: ' . $e->getMessage());
}
return $this->jsonDecodeOrError($uriPath, $resp);
}
protected function buildApiUri($path)
{
return '/api/' . $this->api_version . $path;
}
我还认为测试此问题的唯一方法是将guzzle客户端传递到我自己的客户端中,这样我就可以利用Guzzles模拟处理程序
use GuzzleHttp\Client;
public function __construct($apikey, Client $client, $max_retries = 5)
我的客户端只有少数几种方法,它们从本质上调用了各种其他终结点。
我面临的另一个问题是分页。我正在使用的其余API返回分页数据,我想在客户端中处理分页。
即-如果对 / users 的调用每页返回 10个用户,总共100个用户,我希望使用-> getUsers() 客户类中的方法可返回100条记录。
可以利用耗时的方法,或者我遍历每个请求,直到从API获得所有记录为止。
该软件包不需要特定于Laravel(服务提供商)
预先感谢