mirror of
http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore.git
synced 2026-01-15 07:15:06 +08:00
refactor(http): 整理了 Http 请求服务
Signed-off-by: 李东云 <dongyu.li@luxcreo.ai>
This commit is contained in:
190
src/Http/RequestService.php
Normal file
190
src/Http/RequestService.php
Normal file
@@ -0,0 +1,190 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Singularity\HDK\Core\Http;
|
||||
|
||||
use Ergebnis\Http\Method;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use GuzzleHttp\Psr7\Utils;
|
||||
use Hyperf\Codec\Json;
|
||||
use Hyperf\Di\Annotation\Inject;
|
||||
use Hyperf\Guzzle\ClientFactory;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Singularity\HDK\Core\Service\AbstractSingleton;
|
||||
|
||||
/**
|
||||
* Singularity\HDK\Core\Service\Http\RequestService@Core
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* Powered by PhpStorm
|
||||
* Created on 2023/8/30
|
||||
*
|
||||
* @template Options of array<literal-string, mixed>
|
||||
*/
|
||||
final class RequestService extends AbstractSingleton
|
||||
{
|
||||
// public const TIMEOUT = 20;
|
||||
|
||||
#[Inject]
|
||||
private ClientFactory $client;
|
||||
|
||||
/**
|
||||
* @var Options
|
||||
*/
|
||||
private array $options = [];
|
||||
|
||||
/**
|
||||
* @param Options $options
|
||||
*/
|
||||
public function __construct(array $options = [])
|
||||
{
|
||||
$this->setOptions($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 定制 options
|
||||
* @param Options $options
|
||||
* @return $this
|
||||
*/
|
||||
public function setOptions(array $options): self
|
||||
{
|
||||
$this->options = array_replace_recursive($this->options, $options);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, string|int> $params
|
||||
* @param array $data
|
||||
* @param Options $options
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function requestGet(
|
||||
string $url,
|
||||
array $params = [],
|
||||
array $data = [],
|
||||
array $options = []
|
||||
): ResponseInterface {
|
||||
$request = new Request(
|
||||
method: Method\Rfc\Rfc7231::GET, uri: $url
|
||||
);
|
||||
return $this->getClient($options)->send($request, ['query' => $params, 'json' => $data,]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工厂模式初始化请求
|
||||
* @param Options $options
|
||||
* @return Client
|
||||
*/
|
||||
private function getClient(array $options): Client
|
||||
{
|
||||
$options = array_replace_recursive($this->options, $options);
|
||||
return $this->client->create($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, string|int> $params
|
||||
* @param array<string, mixed> $data
|
||||
* @param Options $options
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function requestPost(
|
||||
string $url,
|
||||
array $params = [],
|
||||
array $data = [],
|
||||
array $options = []
|
||||
): ResponseInterface {
|
||||
$data = Json::encode($data);
|
||||
$request = new Request(
|
||||
method: Method\Rfc\Rfc7231::POST,
|
||||
uri: $url,
|
||||
headers: ['Content-Type' => 'application/json'],
|
||||
body: Utils::streamFor($data),
|
||||
);
|
||||
return $this->getClient($options)->send($request, ['query' => $params,]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, mixed> $data
|
||||
* @param array<string, string|int> $params
|
||||
* @param Options $options
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function requestPut(
|
||||
string $url,
|
||||
array $params = [],
|
||||
array $data = [],
|
||||
array $options = []
|
||||
): ResponseInterface {
|
||||
$data = Json::encode($data);
|
||||
$request = new Request(
|
||||
method: Method\Rfc\Rfc7231::PUT,
|
||||
uri: $url,
|
||||
headers: ['Content-Type' => 'application/json'],
|
||||
body: Utils::streamFor($data)
|
||||
);
|
||||
return $this->getClient($options)->send(
|
||||
$request, ['query' => $params,]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, mixed> $data
|
||||
* @param array<string, string|int> $params
|
||||
* @param Options $options
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function requestPatch(
|
||||
string $url,
|
||||
array $params = [],
|
||||
array $data = [],
|
||||
array $options = []
|
||||
): ResponseInterface {
|
||||
$data = Json::encode($data);
|
||||
$request = new Request(
|
||||
method: Method\Rfc\Rfc5789::PATCH,
|
||||
uri: $url,
|
||||
headers: ['Content-Type' => 'application/json'],
|
||||
body: Utils::streamFor($data)
|
||||
);
|
||||
return $this->getClient($options)->send(
|
||||
$request, ['query' => $params,]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, mixed> $data
|
||||
* @param array<string, string|int> $params
|
||||
* @param Options $options
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function requestDelete(
|
||||
string $url,
|
||||
array $params = [],
|
||||
array $data = [],
|
||||
array $options = []
|
||||
): ResponseInterface {
|
||||
$data = Json::encode($data);
|
||||
$request = new Request(
|
||||
method: Method\Rfc\Rfc7231::DELETE,
|
||||
uri: $url,
|
||||
headers: ['Content-Type' => 'application/json'],
|
||||
body: Utils::streamFor($data)
|
||||
);
|
||||
return $this->getClient($options)->send(
|
||||
$request, ['query' => $params,]
|
||||
);
|
||||
}
|
||||
}
|
||||
22
src/Http/RequestServiceFactory.php
Normal file
22
src/Http/RequestServiceFactory.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* RequestFactory.php@Core
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* Powered by PhpStorm
|
||||
* Created on 2023/8/30
|
||||
*/
|
||||
|
||||
namespace Singularity\HDK\Core\Http;
|
||||
|
||||
use Singularity\HDK\Core\Service\AbstractFactory;
|
||||
|
||||
final class RequestServiceFactory extends AbstractFactory
|
||||
{
|
||||
public static function make(array $options = []): RequestService
|
||||
{
|
||||
return new RequestService($options);
|
||||
}
|
||||
}
|
||||
30
src/Service/AbstractFactory.php
Normal file
30
src/Service/AbstractFactory.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* AbstractFactory.php@Core
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* Powered by PhpStorm
|
||||
* Created on 2023/8/30
|
||||
*/
|
||||
|
||||
namespace Singularity\HDK\Core\Service;
|
||||
|
||||
use Dont\DontCall;
|
||||
use Dont\DontInstantiate;
|
||||
|
||||
/**
|
||||
* Singularity\HDK\Core\Service\AbstractFactory@Core
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* Powered by PhpStorm
|
||||
* Created on 2023/8/30
|
||||
*/
|
||||
abstract class AbstractFactory
|
||||
{
|
||||
use DontInstantiate;
|
||||
use DontCall;
|
||||
|
||||
abstract static function make();
|
||||
}
|
||||
26
src/Service/AbstractSingleton.php
Normal file
26
src/Service/AbstractSingleton.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* SingletonInterface.php@Core
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* Powered by PhpStorm
|
||||
* Created on 2023/8/30
|
||||
*/
|
||||
|
||||
namespace Singularity\HDK\Core\Service;
|
||||
|
||||
use Dont\DontCallStatic;
|
||||
use Dont\DontClone;
|
||||
|
||||
/**
|
||||
* Singularity\HDK\Core\Service\SingletonInterface@Core
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* Powered by PhpStorm
|
||||
* Created on 2023/8/30
|
||||
*/
|
||||
abstract class AbstractSingleton
|
||||
{
|
||||
use DontCallStatic;
|
||||
use DontClone;
|
||||
}
|
||||
@@ -16,6 +16,7 @@ use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* 发起 Http 请求的类
|
||||
* @deprecated since version 1.0-alpha.3, to be removed in 1.0
|
||||
*/
|
||||
class HttpRequestService
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user