aedart/athenaeum-http-clients

Http 客户端包装器,附带一个能够处理多个客户端实例(配置文件)的管理器

8.10.0 2024-09-23 07:54 UTC

README

此包提供Http客户端包装器,具有强大的流畅请求构建器,能够使用不同的Http查询语法,支持Json ApiOData。此外,它还附带一个管理器,允许您处理多个http客户端"配置文件"。这使得您可以将与每个api通信的每个部分分割成它自己的客户端实例。

在幕后使用Guzzle Http Client

示例

配置

return [

    'profiles' => [

        'my-client' => [
            'driver'    => \Aedart\Http\Clients\Drivers\JsonHttpClient::class,
            'options'   => [
                'base_uri' => 'https://acme.com/api/v2'
            ]
        ],
    ]
    
    // ... remaining not shown ...
];

用法

use Aedart\Http\Clients\Traits\HttpClientsManagerTrait;
use Aedart\Contracts\Http\Clients\Responses\Status;
use Teapot\StatusCode;
use DateTime;

class CurrencyController
{
    use HttpClientsManagerTrait;
    
    public function index()
    {
        $client = $this->getHttpClientsManager()->profile('my-client');
        
        // Perform a GET request
        $response = $client
            ->useTokenAuth('my-secret-api-token')
            ->where('currency', 'DKK')
            ->whereDate('date', new DateTime('now'))
            ->expect(StatusCode::OK, function(Status $status){
                throw new RuntimeException('API is not available: ' . $status);
            })
            ->get('/currencies');
        
        // ...remaining not shown
    }
}

动机

A Http Client "包"在Athenaeum库的3.x版本中提供。它提供了管理器来处理多个"配置文件"和一些用于逐步构建请求的流畅方法。但它不如当前版本全面。当Laravel发布v7.x版本时,它附带了一个自定义的Http Client。因此,这个包变得有些不相关,并被认为是弃用的。最终,我决定完全重新设计这个包,将一些已经提供的功能与新功能相结合。

因此,此包现在从Laravel的Http Client以及数据库查询构建器中汲取灵感。您将在Laravel提供的客户端和此包提供的客户端之间找到许多相似之处。意图并不是复制Laravel的Http Client,而是提供一种不同的请求构建方法。

在考虑是否使用此Http Client、Laravel或其他Http Client时,可能最好坚持使用您最舒适的方法。从不同角度看待这个问题,考虑一下,Laravel对其包的支持远比我目前能提供的要好。

文档

请阅读官方文档以获取更多信息。

存储库

单仓库位于github.com/aedart/athenaeum

版本控制

此包遵循语义版本控制2.0.0

许可

BSD-3-Clause,阅读包含在此包中的LICENSE文件