https://github.com/paysera/lib-rest-client-common
Generic library for RESTful API clients
https://github.com/paysera/lib-rest-client-common
Last synced: 5 months ago
JSON representation
Generic library for RESTful API clients
- Host: GitHub
- URL: https://github.com/paysera/lib-rest-client-common
- Owner: paysera
- Created: 2017-02-03T12:25:17.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-12-14T11:32:25.000Z (over 1 year ago)
- Last Synced: 2024-03-15T13:09:50.514Z (about 1 year ago)
- Language: PHP
- Homepage:
- Size: 68.4 KB
- Stars: 5
- Watchers: 11
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
## lib-rest-client-common 
Generic library for RESTful API clients
#### Usage
You should create `ClientFactory` class, which extends `ClientFactoryAbstract`.
In `ClientFactory` you can override any parent configuration if needed.Simple example of `ClientFactory`:
```php
class TestClientFactory extends ClientFactoryAbstract
{
const DEFAULT_BASE_URL = 'http://example.com/test/rest/v1/{locale}/';
private $apiClient;public function __construct(array $options)
{
$this->apiClient = $this->createApiClient($options);
}public function getTestClient()
{
return new TestClient($this->apiClient);
}
}
```Using this pattern you can reuse same `ApiClient` with it's authentication and other options in different APIs.
In addition to `ClientFactory`, you should create also the `Client` itself.
Finally you will use the `Client` itself, so it should contain all the methods your API provides.
Simple example of `TestClient`:
```php
class TestClient
{
private $apiClient;public function __construct(ApiClient $apiClient)
{
$this->apiClient = $apiClient;
}
public function withOptions(array $options)
{
return new TestClient($this->apiClient->withOptions($options));
}/**
* @return array
*/
public function getSomething()
{
$request = $this->apiClient->createRequest(
RequestMethodInterface::METHOD_GET,
sprintf('/something'),
null
);
return $this->apiClient->makeRequest($request);
}
}
```You should implement mapping or data transformation where applicable in `TestClient` methods.
#### Example:```php
use Paysera\Client\CategoryClient\ClientFactory;
$clientFactory = new ClientFactory([
'base_url' => 'custom base url',
'auth_base_url' => 'custom auth base url',
'basic' => [
'username' => 'user',
'password' => 'pass'
],
'oauth' => [
'token' => [
'access_token' => 'your oauth access token',
'refresh_token' => 'your oauth refresh token',
],
],
'mac' => [
'mac_id' => 'mac id',
'mac_secret' => 'mac secret',
'parameters' => [
// list of needed parameters
]
],
'url_parameters' => [
'locale' => 'en',
// list of base_url placeholder parameter values
],
'headers' => [
'Accept-Language' => 'en',
],
// other configuration options
]);$testClient = $clientFactory->getTestClient();
$data = $testClient->getSomething();
```
* Please note that only single authentication mechanism is supported.In case you want to change some configuration options at runtime, use `TestClient::withOptions()`:
```php
$factory = new TestClientFactory([
MacAuthentication::TYPE => [
'mac_id' => $macId,
'mac_secret' => $macSecret,
'parameters' => [
'user_id' => 100,
]
]
]);$client = $factory->getTestClient();
$client2 = $factory->getTestClient()->withOptions([
MacAuthentication::TYPE => [
'parameters' => ['user_id' => 999],
]
]);
```Here for `$client2` only `user_id` in `parameters` will be changed. Other configuration, like `mac_id`, `mac_secret` will
be left intact.