beat/http-client

具有数据库记录、作业、pruning 命令的 HTTP 请求...

v1.2.1 2024-02-28 19:39 UTC

README

Beat/HttpClient 是一个 PHP 包,旨在简化对其他 API 的请求。它专为 Laravel/BEAT 项目中最常见的用例而设计。尽管如此,它相当灵活且可配置,允许自动化系统在数据库和日志中记录请求。

use Beat\HttpClient\Facades\HttpClient;
use Beat\HttpClient\Exceptions\ResponseValidationException
use Beat\HttpClient\Exceptions\ServerException;
use Beat\HttpClient\Exceptions\CommunicationException;

// Realizar una petición a google.es de forma asíncrona. La petición realmente se realizará al llamar a wait()
// o similar en la promesa resultante. Es posible hacer peticiones simultáneas agrupando las promesas y
// desempaquetándolas (unwrap()).
$response_promise = HttpClient::newRequest('Using default profile')
   ->to('GET', 'https://google.es')
   ->executeAsync();

// Una petición síncrona que espera un json.
// La respuesta es decodificada y validada automáticamente. Se lanzan excepciones apropiadas según el caso.
try {
    $validated_data = HttpClient::onProfile('lx')->newRequest('Obtener secciones de LX')
        ->to('GET', '/api/externo/secciones')
        ->expectsJson()
        ->withValidationRules([
            'data'               => 'present|array',
            'data.*'             => 'array',
            'data.*.codigo'      => 'required|string|max:5',
            'data.*.descripcion' => 'required|string|max:255',
        ])
        ->withValidatorCallback(function (Validator $v) {
            if ($v->errors()->isNotEmpty()) { return; }
            
            // Comprobar más cosas de los datos de la respuesta
        })
        ->execute();        
} catch (ResponseValidationException $rve) {
    echo "Invalid response...\n";
    echo print_r($rve->getValidationErrors(), true);
    die(1);
} catch (InvalidJsonException $ije) {
    echo "Response is not a JSON...\n";
    die(1);
} catch (ServerException $se) {
    // ...
} catch (CommunicationException $ce) {
    // ...
}

内部,该包使用 GuzzleHttp (0.7.x)。

目标

该包旨在提供一个可重用、经过良好测试和灵活的 HTTP 客户端实现,其中包含用于记录请求的集成功能以及方便在 BEAT API 中进行认证和验证响应的便利性。

进一步阐述目标

  • 通过配置定义 HTTP 客户端配置文件。每个配置/配置文件已设置要由配置文件生成的请求记录,此外还可以指定配置文件请求的常见选项,例如基本 URI、签名提供者(认证)等。

  • 用于执行请求的流畅 API,以及专为 BEAT 项目用例设计的功能和集成。特别是对 JSON 请求(发送、接收、解码、验证)的支持。

  • 对配置文件的支持,可以轻松设置 Beat 通信中通常关注的参数。

  • 流畅的 API 用于执行请求,特别支持 JSON 请求。

  • 记录执行的请求。每个配置文件可以指定哪些 Sink 应通过相同的方式记录请求。该包包括 2 个 Sink 实现,用于日志和数据库。

  • 探索 Laravel 可重用包的世界。

要求

  • PHP (7.4, 8.0, 8.1 或 8.2)
  • Laravel 8.x
  • ext-curl

用户指南

TODO

  • ResponseValidationException: 解码数据的 getters。也许需要验证器。

  • profile_assignment: 在配置中预分配配置文件到类,以便服务提供者在通过依赖注入生成这些类时为这些类配置特定的客户端配置文件。