a micro-client generator to communicate between microservices in Laravel applications.
Via Composer
$ composer require shetabit/extractorIf 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 responseas 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 , therejectwill 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 , therejectwill 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 clientNamemicro-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.
