Я разрабатываю проект Laravel с самого начала и хочу создать универсальный класс, который может ставить в очередь задание для данных, которые будут переданы во внешний API.Как я могу это сделать?Я новичок в очередях и заданиях.
Следующий код - это то, что я пробовал.Я создал следующий класс Job и назвал его, где мне нужно отправить данные во внешние API.Это сработало для меня.Но я открыт для других решений.
class ApiPushService implements ShouldQueue
{
use InteractsWithQueue, SerializesModels, Queueable;
protected $endpoint;
protected $data;
/**
* ApiPushService constructor.
* @param $endpoint
* @param $data
*/
public function __construct($endpoint, $data)
{
$this->endpoint = $endpoint;
$this->data = $data;
}
/**
* @param Client $guzzleClient
*/
public function handle(Client $guzzleClient)
{
//get external api url
$url = $this->endpoint;
try {
$response = $guzzleClient->request('POST', $url, [
'headers' => array("Content-Type" => "application/json"),
'json' => $this->data
]);
} catch (BadResponseException $e) {
Log::error("ApiPushService (handle): Guzzle Bad Response Exception : " . $e->getMessage());
} catch (RequestException $e) {
Log::error("ApiPushService (handle): Guzzle Request Exception : " . $e->getMessage());
} catch (GuzzleException $e) {
Log::error("ApiPushService (handle): Guzzle Exception : " . $e->getMessage());
}
if ($response->getStatusCode() != 200) {
Log::info("ApiPushService (handle): Endpoint Response : ",
json_decode((string)$response->getBody(), true));
} else {
Log::error("ApiPushService (handle): Guzzle Request error : ",
json_decode((string)$response->getBody(), true));
}
}
}