ehsandevs / service-proxy
for proxy or sending requests to other services with useful utilities
v4.0.1
2025-01-05 14:07 UTC
Requires
- php: ^7.4 || ^8.3
- ext-json: *
- ehsandevs/bresources: ^1.5 || ^2.2 || ^2.4
- guzzlehttp/guzzle: ^7.0
- laravel/framework: ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- orchestra/testbench: ^v6.0 || ^v7.0
README
Internal communication between services with useful tools
Make request by laravel http client
Installation
composer require behamin/service-proxy
Publish config
php artisan vendor:publish --provider="Ehsandevs\ServiceProxy\Providers\ProxyServiceProvider" --tag config
Add services
Add your project's base url and global headers in proxy.php
config
return [ /** * Headers added to every request */ 'global_headers' => [ 'Accept' => 'application/json', ... ], 'base_url' => env('PROXY_BASE_URL', env('APP_URL')), ];
Usage
Normal usage
use Ehsandevs\ServiceProxy\Proxy; // Http Get Proxy::withToken('Your bearer token') ->acceptJson() ->retry(3) ->withHeaders([ "Content-Type" => "application\json" ])->get('api/articles'); Proxy::post('api/articles', [ "title" => "Test title", "body" => "Test body" ]); Proxy::patch('api/articles/1', [ "title" => "Test title", "body" => "Test body" ]); Proxy::put('api/articles', [ "title" => "Test title", "body" => "Test body" ]); Proxy::delete('api/articles/1');
Using http request
use Ehsandevs\ServiceProxy\Proxy; use Illuminate\Http\Request; public function index(Request $request) { $serviceName = 'test-service'; Proxy::request($request, $serviceName); }
Proxy events
On success
use Ehsandevs\ServiceProxy\Proxy; use Ehsandevs\ServiceProxy\Responses\ProxyResponse; Proxy::get('api/articles/1')->onSuccess(function (ProxyResponse $proxyResponse) { $data = $proxyResponse->data(); $message = $proxyResponse->message(); $response = $proxyResponse->response(); $items = $proxyResponse->items(); $count = $proxyResponse->count(); ... });
On error
use Ehsandevs\ServiceProxy\Proxy; use Ehsandevs\ServiceProxy\Exceptions\ProxyException; Proxy::get('api/articles/1')->onSuccess(function (ProxyException $proxyException) { $proxyResponse = $proxyException->proxyResponse; $trace = $proxyException->getTraceAsString(); ... });
On data success
use Ehsandevs\ServiceProxy\Proxy; Proxy::get('api/articles/1')->onDataSuccess(function (array $data) { $id = $data['id']; });
On data collection success
use Ehsandevs\ServiceProxy\Proxy; Proxy::get('api/articles/1')->onCollectionSuccess(function (array $items, int $count) { ... });
Proxy response methods
use Ehsandevs\ServiceProxy\Proxy; $proxyResponse = Proxy::get('api/articles/1');
Proxy request methods
Mocking proxy response
You can use mock()
on Proxy class before calling http methods and pass the json path in your 'tests/mock' directory, to mock a json for faking your Proxy response in test mode.
Example:
use Ehsandevs\ServiceProxy\Proxy; Proxy::mock('response.json')->get('address');