mtrn/apiservice

API 服务:获取 API 响应并将其映射到您选择的任何对象。

dev-main 2022-12-08 06:33 UTC

This package is auto-updated.

Last update: 2024-09-08 10:15:27 UTC


README

Latest Version on Packagist Total Downloads Build Status StyleCI

此包提供了一个 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();