Во-первых, это подтверждение концепции, а не рабочий код, и может потребовать некоторой доработки.
Из вашего первого API вы должны позвонить второму API, чтобы он что-то обработал.
Второй API должен затем ответить, как только он получил данные (не обработанные один раз).
Первый API
use GuzzleHttp\Client;
public function callApiTwo(Request $request)
{
$client = new Client()
$data = [];
$res = $client->post('http://apitwoexample.com', [
'body' => json_encode($data)
]);
if ($res->getStatus() !== 203) {
// error in processing
}
$resData = json_decode($res->getBody()->getContents());
$token = $resData['token'];
return response()->json([
'success' => 'Data is being processed',
'token' => $token
], 202);
}
Второй API
Затем второй API должен получить данные (ссылки на файлы, изображения, данные и т. Д.) И отправить задание (как упомянуто в упомянутом @jonathon).
Затем вам потребуется какой-то идентификатор для process
/job
/ record
.A id
или token
в некотором роде.Он возвращается к первому API в своем ответе.
public function executeProcess(Request $request)
{
// Perform logic
$token = str_rand(10);
Job::dispatch('/job/which/needs/time/to/run', [
'data' => $data,
'token' => $token
]);
return response()->json([
'success' => 'Data is being processed',
'token' => $token
], 202);
}
public function progressStatus(Request $request)
{
$model = Model::whereToken($request->token)->first();
return response()->json([
'status' => $model->status
], 200);
}
Вы заметите метод progressStatus
, который я привел в качестве примера для проверки процессов process
/ job
/ record
по некоторому идентификатору.
Начиная с первого API, его можно запустить с помощью команды artisan
или job
, который помещается в очередь для повторного запуска (после задержки) в зависимости от того, подтвердил ли второй API процессзавершено.
Дайте мне знать, если это требует большей ясности.