sidus / api-client-bundle
简化带有认证、序列化和缓存的业务API客户端创建
v1.0.3
2024-09-04 15:44 UTC
Requires
- php: >=8.1
- psr/http-client: >1.0
- psr/http-factory: >1.0
- symfony/cache-contracts: >2.0
- symfony/serializer: >5.3
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-04 15:45:17 UTC
README
介绍
此库提供了构建面向业务的OAuth API客户端的基本模块,非常容易使用。
功能
- 自动令牌协商
- API请求和响应的序列化和反序列化
- API响应的缓存层
- 易于扩展和定制
基本用法
简单请求
/** @var \Sidus\ApiClientBundle\ApiClient $apiClient */ $apiRequest = new \Sidus\ApiClientBundle\Model\Request\AuthenticatedApiRequest( new \Sidus\ApiClientBundle\Model\Request\Component\HttpComponent( baseUri: 'https://api.example.com', path: '/api/v1/resource', ), ); $response = $apiClient->query($apiRequest); $response->getBody(); // Raw response content
使用归一化/去归一化
/** @var \Sidus\ApiClientBundle\ApiClient $apiClient */ $apiRequest = new \Sidus\ApiClientBundle\Model\Request\AuthenticatedApiRequest( new \Sidus\ApiClientBundle\Model\Request\Component\HttpComponent( baseUri: 'https://api.example.com', path: '/api/v1/resource', method: 'POST', ), ); $apiRequest->setSerializationComponent( new \Sidus\ApiClientBundle\Model\Request\Component\SerializationComponent( content: new Resource(), ), ); $apiRequest->setDeserializationComponent( new \Sidus\ApiClientBundle\Model\Request\Component\DeserializationComponent( className: ResourceResponse::class, ), ); $response = $apiClient->query($apiRequest); $responseResource = $response->getContent(); // Deserialized response content
使用缓存
/** * @var \Sidus\ApiClientBundle\ApiClient $apiClient * @var \Sidus\ApiClientBundle\Model\Request\ApiRequest $apiRequest */ $apiRequest->setCacheComponent( new \Sidus\ApiClientBundle\Model\Request\Component\CacheComponent( ttl: 3600, ), );
安装
composer require sidus/api-client-bundle
配置
您有两种方式提供令牌协商的凭据
声明一个凭据服务
services: app.oauth_credentials: class: Sidus\ApiClientBundle\Credentials arguments: $baseUrl: 'https://api.example.com' $path: '/oauth/token' # Token negotiation endpoint $authenticationParams: # What you send to the token negotiation endpoint username: 'xxxx' password: 'xxxx'
每次您使用相同的基地址创建API请求时,凭据将自动使用。
或者,您可以直接在API请求中提供访问令牌
$apiRequest = new \Sidus\ApiClientBundle\Model\Request\AuthenticatedApiRequest( new \Sidus\ApiClientBundle\Model\Request\Component\HttpComponent( baseUri: 'https://api.example.com', path: '/api/v1/resource', ), ); $apiRequest->setAuthorizationComponent( new Sidus\ApiClientBundle\Model\Authorization\OAuthToken( accessToken: 'xxxx', ), );
或者任何实现 \Sidus\ApiClientBundle\Contracts\Request\Component\AuthorizationComponentInterface
接口的自定义授权组件。
当使用自定义头时,只需在API请求中添加自定义头即可
$apiRequest->addHeader('X-Custom-Header', 'value');
或者使用事件监听器,通过使用 \Sidus\ApiClientBundle\Model\Event\ApiRequestEvent
事件自动添加头。