samsonasik / apigility-consumer
Laminas API Tools Client API Service Consumer
Fund package maintenance!
samsonasik
Installs: 1 246
Dependents: 0
Suggesters: 0
Security: 0
Stars: 16
Watchers: 3
Forks: 2
Open Issues: 0
Requires
- php: ^8.0
- laminas/laminas-http: ^2.14
- laminas/laminas-json: ^3.2
- laminas/laminas-servicemanager: ^3.6
- laminas/laminas-stdlib: ^3.3
Requires (Dev)
- guzzlehttp/guzzle: ^7.2
- kahlan/kahlan: ^5.2
- laminas/laminas-coding-standard: ^2.1.1
- php-coveralls/php-coveralls: ^2.4
- phpstan/phpstan: ^1.0
- rector/rector: dev-main
- dev-master
- 4.0.1
- 4.0.0
- 3.x-dev
- 3.0.1
- 3.0.0
- 2.x-dev
- 2.2.0
- 2.1.8
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.x-dev
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.12
- 0.0.11
- 0.0.10
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
This package is auto-updated.
Last update: 2024-10-11 08:04:44 UTC
README
Laminas API Tools Client module to consume API Services.
This is README for version ^4.0 which only support php ^8.0 with laminas-servicemanager v3 and laminas-json v3.
For version ^3.0 you can read at version 3 readme which only support php ^7.1 with laminas-servicemanager v3 and laminas-json v3.
For version ^2.0, you can read at version 2 readme which only support php ^7.1 with zend-servicemanager v3 and zend-json v3.
For version 1, you can read at version 1 readme which still support php ^5.6|^7.0 with zend-servicemanager v2.
Consider upgrading :)
Installation
Installation of this module uses composer.
composer require samsonasik/apigility-consumer
For its configuration, copy vendor/samsonasik/apigility-consumer/config/apigility-consumer.local.php.dist
to config/autoload/apigility-consumer.local.php
and configure with your api host url (required), oauth, and/or http auth settings:
use Laminas\Http\Client as HttpClient; return [ 'apigility-consumer' => [ 'api-host-url' => 'http://api.host.com', // null for default or array of configuration listed at https://docs.zendframework.com/zend-http/client/intro/#configuration 'http_client_options' => null, // for oauth 'oauth' => [ //default selected client 'grant_type' => 'password', // or client_credentials 'client_id' => 'foo', 'client_secret' => 'foo_s3cret', // multiple clients to be selected 'clients' => [ 'foo' => [ // foo is client_id 'grant_type' => 'password', // or client_credentials 'client_secret' => 'foo_s3cret', ], 'bar' => [ // bar is client_id 'grant_type' => 'password', // or client_credentials 'client_secret' => 'bar_s3cret', ], ], ], // for basic and or digest 'auth' => [ // default client HttpClient::AUTH_BASIC => [ 'username' => 'foo', 'password' => 'foo_s3cret' ], HttpClient::AUTH_DIGEST => [ 'username' => 'foo', 'password' => 'foo_s3cret' ], // multiple clients to be selected 'clients' => [ 'foo' => [ // foo is key represent just like "client_id" to ease switch per-client config HttpClient::AUTH_BASIC => [ 'username' => 'foo', 'password' => 'foo_s3cret' ], HttpClient::AUTH_DIGEST => [ 'username' => 'foo', 'password' => 'foo_s3cret' ], ], 'bar' => [ // bar is key represent just like "client_id" to ease switch per-client config HttpClient::AUTH_BASIC => [ 'username' => 'bar', 'password' => 'bar_s3cret' ], HttpClient::AUTH_DIGEST => [ 'username' => 'bar', 'password' => 'bar_s3cret' ], ], ], ], ], ];
Then, enable it :
// config/modules.config.php return [ 'ApigilityConsumer', // <-- register here 'Application', ],
Using at Mezzio
You can use at Mezzio, after set up local config/autoload/apigility-consumer.local.php
like above, you can copy config/mezzio.local.php.dist
to config/autoload/mezzio.local.php
, and you can use it.
Services
1. ApigilityConsumer\Service\ClientAuthService
It used for oauth
, with usage:
use ApigilityConsumer\Service\ClientAuthService; $client = $serviceManager->get(ClientAuthService::class); $data = [ 'api-route-segment' => '/oauth', 'form-request-method' => 'POST', 'form-data' => [ 'username' => 'foo', // not required if grant_type config = 'client_credentials' 'password' => '123', // not required if grant_type config = 'client_credentials' ], ]; $timeout = 100; $clientResult = $client->callAPI($data, $timeout);
Specify Oauth "client_id"
You can specify what client_id to be used on Http Auth with provide withClient()
:
$clientResult = $client->withClient('bar') // bar is "client_id" defined in clients in oauth config ->callAPI($data, $timeout);
Reset Oauth "client_id"
We can re-use the client service and use back default "client_id" with resetClient()
:
$clientResult = $client->withClient('bar') // bar is "client_id" defined in clients in auth config ->callAPI($data, $timeout); $clientResultDefault = $client->resetClient() ->callAPI($data, $timeout);
2. ApigilityConsumer\Service\ClientService
For general Api Call, with usage:
a. General RAW Json data
use ApigilityConsumer\Service\ClientService; $data = [ 'api-route-segment' => '/api', 'form-request-method' => 'POST', 'form-data' => [ // fields that will be used as raw json to be sent 'foo' => 'fooValue', ], // token type and access token if required 'token_type' => 'token type if required, for example: "Bearer"', 'access_token' => 'access token if required', ]; $client = $serviceManager->get(ClientService::class); $timeout = 100; $clientResult = $client->callAPI($data, $timeout);
b. With Upload file
You can also do upload with it to upload file to API Service. For example:
use ApigilityConsumer\Service\ClientService; $data['api-route-segment'] = '/api'; $data['form-request-method'] = 'POST'; $data['form-data'] = $request->getPost()->toArray(); $data['form-data']['files'] = $request->getFiles()->toArray(); /** data['form-data'] should be containst like the following [ 'regular_key1' => 'regular_keyValue1', 'regular_key2' => 'regular_keyValue2', 'files' => [ 'file1' => [ 'type' => 'text/csv', 'name' => 'file.csv', 'tmp_name' => '/path/to/tmp/file', 'error' => 'UPLOAD_ERR_OK', 'size' => 123, ], 'file2' => [ 'type' => 'text/csv', 'name' => 'file2.csv', 'tmp_name' => '/path/to/tmp/file2', 'error' => 'UPLOAD_ERR_OK', 'size' => 123, ], ], ] */ $client = $serviceManager->get(ClientService::class); $timeout = 100; $clientResult = $client->callAPI($data, $timeout);
With include Http (basic or digest) Authentication
if api call require authentication for basic or digest, you can apply ->withHttpAuthType()
:
use Laminas\Http\Client as HttpClient; $clientResult = $client->withHttpAuthType(HttpClient::AUTH_BASIC) ->callAPI($data, $timeout); // OR $clientResult = $client->withHttpAuthType(HttpClient::AUTH_DIGEST) ->callAPI($data, $timeout);
that will read of specified basic or digest auth config we defined at config/autoload/apigility-consumer.local.php
.
If you want to specify custom username and password for the Http Auth on callAPI()
call, you can specify via $data
:
use Laminas\Http\Client as HttpClient; $data = [ 'api-route-segment' => '/api', 'form-request-method' => 'POST', 'form-data' => [ // fields that will be used as raw json to be sent 'foo' => 'fooValue', ], 'auth' => [ HttpClient::AUTH_BASIC => [ 'username' => 'foo', 'password' => 'foo_s3cret' ], HttpClient::AUTH_DIGEST => [ 'username' => 'foo', 'password' => 'foo_s3cret' ], ], ]; $clientResult = $client->withHttpAuthType(HttpClient::AUTH_BASIC) ->callAPI($data, $timeout); // OR $clientResult = $client->withHttpAuthType(HttpClient::AUTH_DIGEST) ->callAPI($data, $timeout);
Specify "client_id" on Http Auth
On Http Auth, there is no "client_id" definition concept. On ClientService
, they are keys that represent just like "client_id" to ease switch client specific http auth.
To allow You can specify what "client_id" to be used on Http Auth with provide withClient()
:
$clientResult = $client->withClient('bar') // bar is "client_id" defined in clients in auth config ->withHttpAuthType(HttpClient::AUTH_BASIC) ->callAPI($data, $timeout);
Reset "client_id" Http Auth
We can re-use the client service and use back default "client_id" with resetClient()
:
$clientResult = $client->withClient('bar') // bar is "client_id" defined in clients in auth config ->withHttpAuthType(HttpClient::AUTH_BASIC) ->callAPI($data, $timeout); $clientResultDefault = $client->resetClient() ->callAPI($data, $timeout);
Reset Http Auth Type
After one or both HttpClient::AUTH_BASIC
or HttpClient::AUTH_DIGEST
used, we can re-use the client service and use back normal API Call without Http Authentication with apply ->resetHttpAuthType()
:
$clientResultWithBasicAuth = $client->withHttpAuthType(HttpClient::AUTH_BASIC) ->callAPI($data1, $timeout); $clientResultWithDigestAuth = $client->withHttpAuthType(HttpClient::AUTH_DIGEST) ->callAPI($data2, $timeout); // RESET IT TO NORMAL WITHOUT HTTP AUTHENTICATION $clientResultWithoutHttpAuth = $client->resetHttpAuthType() ->callAPI($data3, $timeout);
Client Result of callAPI() returned usage
The $clientResult
will be a ApigilityConsumer\Result\ClientResult
or ApigilityConsumer\Result\ClientAuthResult
instance, with this instance, you can do:
//... $clientResult = $client->callAPI($data, $timeout); if (! $clientResult->success) { var_dump($clientResult::$messages); } else { var_dump($clientResult->data); }
Contributing
Contributions are very welcome. Please read CONTRIBUTING.md