mtrn / apiservice
API 服务:获取 API 响应并将其映射到您选择的任何对象。
Requires
- guzzlehttp/guzzle: ^7.5
- illuminate/support: ~9
Requires (Dev)
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.5
README
此包提供了一个 api-service,以简化与不同 API 的工作。它通过使用名为 IsApiClient 的特质将 API 响应映射到您选择的对象。这样,您可以自由地为单个 API 定义不同的客户端。您还可以为单个客户端使用不同的 API。
让我们看看结构
├── configs
│ └── apiservice.php
├── app
│ └── Models
│ └── Client.php
│ └── Services
│ └── ApiService
│ └── ApiProviders
│ └── GoogleApiProvider.php
│ └── Decorators
│ └──GoogleClientDecorator.php
Configs
包的配置文件是 apiservice.php。它的选项有:
apis
这是一个关联数组,键是 API 的名称,值是 API 的配置数组。
每个 API 有三个属性
url:API 的 URL
response_type:API 响应的类型(目前支持的类型是 json)
data_access_keys:它是一个关联数组,其中键是客户端名称,其值是客户端相关数据的访问密钥。
- 默认访问密钥将是客户端的名称;例如 'user' => 'user'。
- 'user' => ' ' 表示整个响应体都与客户端用户相关。
defaults
此选项控制默认值。您可以随意更改它们。它的唯一值是 response_type,其值为 json。
path_to_decorators
此值用于访问装饰器。
path_to_apiproviders
此值用于访问 API 提供者。
Client.php
这是一个使用特质 IsApiClient 的客户端对象示例。
它必须实现函数 getMappedArray(),以将数据以数组格式呈现。
ApiProviders
所有 API 提供者类都应放在此目录中。
API 提供者用于处理与 API 相关的功能;例如向 API 发送请求,或根据其类型选择从响应中提取数据的方式。
对于您每个 API,您应该创建一个 API 提供者,并以 ApinameApiProvider 格式命名。
GoogleApiProvider 是 API 提供者的示例。
注意:它们必须扩展 ApiProvider 抽象类并实现方法 requestFromApi()。
Decorators
所有装饰器类都应放在此目录中。
装饰器用于装饰您的客户端。命名格式为 ApinameClientnameDecorator。
注意:它们必须扩展 Decorator 抽象类并实现方法 mapApiData();
安装
通过 Composer
$ composer require mtrn/apiservice
使用方法
让我们看看提供的示例。
GoogleApiProvider
use Mtrn\ApiService\Services\ApiService\ApiProviders\ApiProvider;
class GoogleApiProvider extends ApiProvider
{
public function requestFromApi()
{
return Http::get($this->url);
}
}
Client
use Mtrn\ApiService\Traits\IsApiClient;
class Client
{
use IsApiClient
public function getMappedArray()
{
return $this->toArray();
}
}
Decorator
use Mtrn\ApiService\Services\ApiService\Decorators\Decorator;
class GoogleClientDecorator extends Decorator
{
/**
* Define your map rules here.
*
* @param array $data
* @return object
*/
public function mapApiData(array $data): object
{
$this->client->setAttribute('name', $data['first_name'].' '.$data['last_name']);
return $this->client;
}
}
向 Google 发送请求并获取响应对象
$client = new Client();
$response = $client->requestFromApi($apiname='google', $map=false);
向 Google 发送请求并获取提取的数据
$client = new Client();
$client->requestFromApi($amiName='google', $map=false);
$extractedData = $client->getApiBody();
向 Google 发送请求并获取映射的数据对象
$client = new Client();
$mappedData = $client->requestFromApi($apiname='google', $map=true);
向 Google 发送请求并获取映射的数组
$client = new Client();
$client->requestFromApi('google', true);
$mappedArray = $client->getMappedArray();