a micro-client
generator to communicate between microservices
in Laravel applications.
Via Composer
$ composer require shetabit/extractor
If you are using Laravel 5.5
or higher then you don't need to add the provider and alias.
In your config/app.php
file add below lines.
# In your providers array.
'providers' => [
...
Shetabit\Extractor\Providers\ExtractorServiceProvider::class,
],
you can send requests to remote API using Request
class, see the below example:
// at the top
use Shetabit\Extractor\Classes\Request;
//...
// create new request
$request = new Request();
// set api's url and method
$request->setUri('http://yoursite.com/api/v1/endpoint')
->setMethod('get');
// run the request and get data
$response = $requet->fetch();
var_dump($response); // show given response
as you see, you can work with remote API in an easy way.
the Request
has more methods to add fileds
, headers
and etc.
setUri(string $uri)
: set API end point.getUri()
: retrieve current end point.setMethod(string $method)
: set method (get, post, patch, put, delete).getMethod()
: get current method.addHeader(string $name, string $value)
: set a header.getHeader(string $name)
: get a header by its name.getHeaders()
: retrieve all headers.setTimeout(int $timeout)
: set request timeout (seconds).getTimeout()
: retrieve timeout (seconds).setBody(string $body)
: set request body.getBody()
: retrieve request body.addFormParam(string $name, string $value)
: add parameters into request similar to html forms.getFormParam(string $name)
: get a form parameter value by its name.getFormParams()
: retrieve all current form parameters.AddMultipartData(string $name, string $value, array $headers)
: add multipart data (multipart/form-data), you can send files using this method.getMultipartData(string $name)
: get current multipart data using its name.addQuery(string $name, string $value)
: add query string into current request.getQuery($name)
: get a query by its name.getQueries()
: get all queries.fetch(callable $resolve, callable $reject)
: runs the request, if fails , thereject
will be called, if succeed then resolve will be called.send(callable $resolve, callable $reject)
: alias offetch
.fetchAsync(callable $resolve, callable $reject)
: runs the request async, if fails , thereject
will be called, if succeed then resolve will be called.sendAsync(callable $resolve, callable $reject)
: alias offetchAsync
.
This package handles communications between micro-services using micro-clients
micro clients can be generated using commands.
php artisan make:micro-client clientName
micro-clients will saved in app/Http/MicroClients
by default.
lets create and example, imagine you have and remote Api (or microservice) and need to login into it.
then, your Login micro-client can be similar to below codes:
namespace App\Http\MicroClients\Auth;
use Shetabit\Extractor\Abstracts\MicroClientAbstract;
use Shetabit\Extractor\Contracts\ResponseInterface;
class Login extends MicroClientAbstract
{
protected $mobile;
protected $password;
public function __construct($username, $password = null)
{
$this->username = $username;
$this->password = $password;
parent::__construct();
}
/**
* Get requests' endpoint
*
* @return string
*/
protected function getEndPoint()
{
return 'http://yoursite.com/api/v1/auth';
}
/**
* Run client
*
* @return ResponseInterface
* @throws \Exception
*/
public function run() : ResponseInterface
{
$response = $this
->request
->setUri($this->getEndPoint())
->setMethod('post')
->addFormParam('username', $this->username)
->addFormParam('password', $this->password)
->fetch();
return $response;
}
}
you can run the Login
micro-client like the below (we have Login micro-client example at the top)
// dump data
$username = 'test';
$password = 'something';
$client = new Login($username, $password);
// run client and login into remote service (remote api)
$response = $client->run();
micro-client starts to work as you call run
method.
use the run
method to handle micro-client
$this->request->setUri('remote-url.com')->fetch();
in each micro-client, you have access to request
object, it can be used to handle communications between micro-services.
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING and CONDUCT for details.
If you discover any security related issues, please email khanzadimahdi@gmail.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.