Создайте универсальный класс, который может ставить в очередь задание для данных, передаваемых во внешний API. - PullRequest
0 голосов
/ 15 февраля 2019

Я разрабатываю проект 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));
        }
    }


}
...