sokil/php-rest-api-client
最新稳定版本:0.1.0
Composer 安装命令:
composer require sokil/php-rest-api-client
包简介
README 文档
README
Installation
$ composer require sokil/php-rest-api-client
Configuration
Base API URI
Any request may contain absolute path to REST API. If all requests performed to same api, you may define base path:
$restApiClient = new RestApiClient(
$psrHttpClient,
$psrRequestFactory,
$psrUriFactory,
null,
null,
"https://api.example.com/some-prefix"
);
Base API URI must be without training slash.
Merging rules:
| Base API URI | Request path | Actual Requested URI |
|---|---|---|
| Not defined | Absolute URI | Absolute URI |
| Not defined | Relative URI | Error |
| http://example.com | /resource | http://example.com/resource |
| http://example.com/prefix | /resource | http://example.com/prefix/resource |
| http://example.com | http://other.com/resource | http://other.com/resource |
| http://example.com/prefix | http://other.com/resource | http://other.com/resource |
Usage
Creation of http client. Client is based on PSR-18 Http Client and PSR-17 Http Factories
<?php use Sokil\RestApiClient\RestApiClient; $restApiClient = new RestApiClient( $psrHttpClient, $psrRequestFactory, $psrUriFactory, null, null, );
Create request class
<?php use Psr\Http\Message\ResponseInterface; use Sokil\RestApiClient\Request\AbstractApiRequest class GetResourceByIdRequest extends AbstractApiRequest { public function __construct( private readonly string $id ) { parent::__construct( 'GET', sprintf('/v1/resources/%s', $this->id), ); } public function parseResponse(ResponseInterface $response): ?object { if ($response->getStatusCode() !== 200) { throw new \Exception('Response code not ok'); } return new SomeResourceDTO(); } }
Calling of API endpoint:
class MyService { public function getResource(): object { $id = 'id_string'; $result = $this->restApiClient->call(new GetResourceByIdRequest($id)) return $result; } }
Usage with OAuth authorization
REST client must be build with additional OAuth2 client argument
<?php use Sokil\RestApiClient\RestApiClient; use Sokil\RestApiClient\Auth\OAuth2\OAuth2Client; use Sokil\RestApiClient\Auth\OAuth2\AuthTokenStorage\SimpleCacheAuthTokenStorage; use Symfony\Component\HttpClient\HttpClient; use Symfony\Component\HttpClient\Psr18Client; use Symfony\Component\Cache\Psr16Cache; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Psr\Log\NullLogger; $symfonyClient = HttpClient::createForBaseUri(getenv('API_HOST')); $psrHttpClient = new Psr18Client($symfonyClient); // used to authorize on authorization server, store and refresh stored access token $oAuth2Client = new OAuth2Client( getenv('AUTH_API_HOST'), getenv('AUTH_CLIENT_ID'), getenv('AUTH_CLIENT_SECRET'), $psrHttpClient, $psrHttpClient, new SimpleCacheAuthTokenStorage(new Psr16Cache(new ArrayAdapter())), new NullLogger(), ); $restApiClient = new RestApiClient( $psrHttpClient, $psrHttpClient, $psrHttpClient, $psrHttpClient, $oAuth2Client, );
Your request class must implement OAuth2AuthorizationAwareInterface
<?php use Psr\Http\Message\ResponseInterface; use Sokil\RestApiClient\Request\AbstractApiRequest use Sokil\RestApiClient\Auth\OAuth2\OAuth2AuthorizationAwareInterface class GetResourceByIdRequest extends AbstractApiRequest implements OAuth2AuthorizationAwareInterface { public function __construct( private readonly string $id ) { parent::__construct( 'GET', sprintf('/v1/resource/%s', $this->id), ); } public function parseResponse(ResponseInterface $response): ?object { if ($response->getStatusCode() !== 200) { throw new \Exception('Response code not ok'); } $body = $this->jsonResponseToArray($response); if (empty($body) || !isset($body['resource'])) { throw new \Exception('Response body invalid'); } return new YourResponseDto(..$values); } }
Usage with token based authorization
REST client must be build with additional token secret provider client argument
<?php use Sokil\RestApiClient\RestApiClient; use Symfony\Component\HttpClient\HttpClient; use Symfony\Component\HttpClient\Psr18Client; use Symfony\Component\Cache\Psr16Cache; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Sokil\RestApiClient\HeaderSecretAuth\SimpleSecretProvider; use Psr\Log\NullLogger; $symfonyClient = HttpClient::createForBaseUri(getenv('API_HOST')); $psrHttpClient = new Psr18Client($symfonyClient); // used to authorize on authorization server, store and refresh stored access token $oAuth2Client = ; $restApiClient = new RestApiClient( $psrHttpClient, $psrHttpClient, $psrHttpClient, null, new SimpleHeaderSecretProvider( getenv('TOKAN_AUTH_HEADER_NAME'), getenv('TOKAN_AUTH_SECRET'), ) );
Your request class must implement HeaderSecretAuthorizationAwareInterface
<?php use Psr\Http\Message\ResponseInterface; use Sokil\RestApiClient\Request\AbstractApiRequest use Sokil\RestApiClient\Auth\OAuth2\OAuth2AuthorizationAwareInterface class GetResourceByIdRequest extends AbstractApiRequest implements HeaderSecretAuthorizationAwareInterface { public function __construct( private readonly string $id ) { parent::__construct( 'GET', sprintf('/v1/resource/%s', $this->id), ); } public function parseResponse(ResponseInterface $response): ?object { if ($response->getStatusCode() !== 200) { throw new \Exception('Response code not ok'); } $body = $this->jsonResponseToArray($response); if (empty($body) || !isset($body['resource'])) { throw new \Exception('Response body invalid'); } return new YourResponseDto(..$values); } }
统计信息
- 总下载量: 4
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: proprietary
- 更新时间: 2024-08-31